import GroupStore from 'app/stores/groupStore';

describe('GroupStore', function () {
  beforeEach(function () {
    GroupStore.reset();
    this.sandbox = sinon.sandbox.create();
  });

  afterEach(function() {
    this.sandbox.restore();
  });

  describe('onMergeSuccess()', function () {
    it('should remove the non-parent merged ids', function () {
      GroupStore.items = [
        {id: 1},
        {id: 2},
        {id: 3},
        {id: 4}
      ];

      GroupStore.onMergeSuccess(null,
        [2, 3, 4], // items merged
        {merge: {parent: 3}} // merge API response
      );

      expect(GroupStore.items).to.eql([
        {id: 1},
        {id: 3} // parent
      ]);
    });
  });

  describe('update methods', function () {
    beforeEach(function () {
      GroupStore.items = [
        {id: 1},
        {id: 2},
        {id: 3},
      ];
    });

    describe('onUpdate()', function () {
      it('should treat undefined itemIds argument as \'all\'', function () {
        this.sandbox.stub(GroupStore, 'trigger');
        GroupStore.onUpdate(1337, undefined, 'somedata');

        expect(GroupStore.trigger.calledOnce).to.be.ok;
        expect(GroupStore.trigger.firstCall.args[0]).to.eql(new Set([1,2,3]));
      });
    });

    describe('onUpdateSuccess()', function () {
      it('should treat undefined itemIds argument as \'all\'', function () {
        this.sandbox.stub(GroupStore, 'trigger');
        GroupStore.onUpdateSuccess(1337, undefined, 'somedata');

        expect(GroupStore.trigger.calledOnce).to.be.ok;
        expect(GroupStore.trigger.firstCall.args[0]).to.eql(new Set([1,2,3]));
      });
    });

    describe('onUpdateError()', function () {
      it('should treat undefined itemIds argument as \'all\'', function () {
        this.sandbox.stub(GroupStore, 'trigger');
        GroupStore.onUpdateError(1337, undefined, 'something failed', false);

        expect(GroupStore.trigger.calledOnce).to.be.ok;
        expect(GroupStore.trigger.firstCall.args[0]).to.eql(new Set([1,2,3]));
      });
    });
  });
});

