import AlertStore from 'sentry/stores/alertStore';

jest.mock('sentry/utils/localStorage');

describe('AlertStore', function () {
  beforeEach(function () {
    AlertStore.alerts = [];
    AlertStore.count = 0;
  });

  describe('addAlert()', function () {
    it('should add a new alert with incrementing key', function () {
      AlertStore.addAlert({
        message: 'Bzzzzzzp *crash*',
        type: 'error',
      });

      AlertStore.addAlert({
        message: 'Everything is super',
        type: 'info',
      });

      expect(AlertStore.alerts).toHaveLength(2);
      expect(AlertStore.alerts[0].key).toEqual(0);
      expect(AlertStore.alerts[1].key).toEqual(1);
    });

    it('should not add duplicates when noDuplicates is set', function () {
      AlertStore.addAlert({
        id: 'unique-key',
        message: 'Bzzzzzzp *crash*',
        type: 'error',
        noDuplicates: true,
      });
      AlertStore.addAlert({
        id: 'unique-key',
        message: 'Bzzzzzzp *crash*',
        type: 'error',
        noDuplicates: true,
      });

      expect(AlertStore.alerts).toHaveLength(1);
    });
  });

  describe('closeAlert()', function () {
    it('should remove alert', function () {
      AlertStore.alerts = [
        {key: 1, message: 'foo', type: 'error'},
        {key: 2, message: 'bar', type: 'error'},
        {key: 3, message: 'baz', type: 'error'},
      ];

      AlertStore.closeAlert(AlertStore.alerts[1]);

      expect(AlertStore.alerts).toHaveLength(2);
      expect(AlertStore.alerts[0].key).toEqual(1);
      expect(AlertStore.alerts[1].key).toEqual(3);
    });
    it('should persist removal of persistent alerts', function () {
      const alert = {
        key: 1,
        id: 'test',
        message: 'this is a test',
        type: 'error',
      } as const;

      AlertStore.closeAlert(alert);
      AlertStore.addAlert(alert);
      expect(AlertStore.alerts).toHaveLength(0);
    });
  });
});