Manual Reference Source Test

tests/events.spec.js

import Beloader from 'beloader';

describe('Beloader events', function () {
  it('should fire regular events', function () {
    var spyItemadded = sinon.spy();
    var spyBeforeprocess = sinon.spy();
    var spyLoadstart = sinon.spy();
    var spyLoadstarted = sinon.spy();
    var spyLoad = sinon.spy();
    var spyLoadend = sinon.spy();
    var spyReady = sinon.spy();
    var spyReady2 = sinon.spy();
    var spyAfterprocess = sinon.spy();

    var loader = new Beloader({
      on: {
        itemadded: spyItemadded,
        beforeprocess: spyBeforeprocess,
        afterprocess: spyAfterprocess
      }
    });

    this.timeout(5000);

    return loader
      .fetch('json', {
        url: 'https://reqres.in/api/users/2',
        on: {
          loadstart: spyLoadstart,
          loadstarted: spyLoadstarted,
          load: spyLoad,
          loadend: spyLoadend,
          ready: [spyReady, spyReady2]
        }
      })
      .promise
      .then(function (item) {
        spyItemadded.called.should.be.true;
        spyBeforeprocess.called.should.be.true;
        spyLoadstart.called.should.be.true;
        spyLoadstarted.called.should.be.true;
        spyLoad.called.should.be.true;
        spyLoadend.called.should.be.true;
        spyReady.called.should.be.true;
        spyReady2.called.should.be.true;
        spyAfterprocess.called.should.be.true;
      });
  });

  it('should prevent default', function () {
    var loader = new Beloader({
      on: {
        load: function pre(ev) {
          ev.preventDefault();
        }
      }
    });

    return loader
      .fetch('json', 'https://reqres.in/api/users/2?4155s')
      .promise.then((item) => {
        expect(loader.progress.data.items.loaded).to.equal(0);
      });
  });

  it('should stop propagation', function () {
    var spy = sinon.spy();
    var loader = new Beloader({
      on: {
        load: spy
      }
    });

    return loader
      .fetch('json', {
        url: 'https://reqres.in/api/users/2',
        on: {
          load: (event) => event.stopPropagation()
        }
      }).promise.then(() => {
        spy.called.should.be.false;
      });
  });

  it('should stop immediate propagation post', function () {
    var spy = sinon.spy();
    var loader = new Beloader();

    return loader
      .fetch('json', {
        url: 'https://reqres.in/api/users/2',
        on: {
          load: [
            event => event.stopImmediatePropagation(),
            event => spy()
          ]
        }
      }).promise.then(() => {
        spy.called.should.be.false;
      });
  });

  it('should stop immediate propagation pre/post', function () {
    var spy = sinon.spy();
    var loader = new Beloader();

    return loader
      .fetch('json', {
        url: 'https://reqres.in/api/users/2',
        on: {
          ready: [
            function pre(event) { event.stopImmediatePropagation(); },
            event => spy()
          ]
        }
      }).promise.then(() => {
        spy.called.should.be.false;
      });
  });

  it('should stop immediate propagation pre', function () {
    var spy = sinon.spy();
    var loader = new Beloader();

    return loader
      .fetch('json', {
        url: 'https://reqres.in/api/users/2',
        on: {
          ready: [
            function pre(event) { event.stopImmediatePropagation(); },
            function pre(event) { spy(); }
          ]
        }
      }).promise.then(() => {
        spy.called.should.be.false;
      });
  });
});