import { expect } from 'chai';
import * as actions from '../../../src/scripts/actions/items';
import { cloneObject } from '../../../src/scripts/lib/utils';
import { ChoiceFull } from '../../../src/scripts/interfaces/choice-full';
import { ActionType } from '../../../src';

describe('actions/items', () => {
  const item: ChoiceFull = {
    highlighted: false,
    active: false,
    disabled: false,
    selected: false,
    value: 'test',
    label: 'test',
    id: 1,
    groupId: 1,
    score: 0,
    rank: 0,
    customProperties: { test: true },
    placeholder: true,
  };

  describe('addItem action', () => {
    it('returns ADD_ITEM action', () => {
      const expectedAction: actions.AddItemAction = {
        type: ActionType.ADD_ITEM,
        item,
      };

      expect(actions.addItem(cloneObject(item))).to.deep.equal(expectedAction);
    });
  });

  describe('removeItem action', () => {
    it('returns REMOVE_ITEM action', () => {
      const expectedAction: actions.RemoveItemAction = {
        type: ActionType.REMOVE_ITEM,
        item,
      };

      expect(actions.removeItem(cloneObject(item))).to.deep.equal(expectedAction);
    });
  });

  describe('highlightItem action', () => {
    it('returns HIGHLIGHT_ITEM action', () => {
      const highlighted = true;
      const expectedAction: actions.HighlightItemAction = {
        type: ActionType.HIGHLIGHT_ITEM,
        item,
        highlighted,
      };

      expect(actions.highlightItem(cloneObject(item), highlighted)).to.deep.equal(expectedAction);
    });
  });
});
