import { Record as ImmutableRecord } from 'immutable';
import { describe, expect, it } from 'vitest';

import {
  MUTES_INIT_MODAL,
  MUTES_TOGGLE_HIDE_NOTIFICATIONS,
} from 'soapbox/actions/mutes.ts';

import reducer from './mutes.ts';

describe('mutes reducer', () => {
  it('should return the initial state', () => {
    expect(reducer(undefined, {} as any).toJS()).toEqual({
      new: {
        isSubmitting: false,
        accountId: null,
        notifications: true,
        duration: 0,
      },
    });
  });

  it('should handle MUTES_INIT_MODAL', () => {
    const state = ImmutableRecord({
      new: ImmutableRecord({
        isSubmitting: false,
        accountId: null,
        notifications: true,
        duration: 0,
      })(),
    })();
    const action = {
      type: MUTES_INIT_MODAL,
      account: { id: 'account1' },
    };
    expect(reducer(state, action).toJS()).toEqual({
      new: {
        isSubmitting: false,
        accountId: 'account1',
        notifications: true,
        duration: 0,
      },
    });
  });

  it('should handle MUTES_TOGGLE_HIDE_NOTIFICATIONS', () => {
    const state = ImmutableRecord({
      new: ImmutableRecord({
        isSubmitting: false,
        accountId: null,
        notifications: true,
        duration: 0,
      })(),
    })();
    const action = {
      type: MUTES_TOGGLE_HIDE_NOTIFICATIONS,
    };
    expect(reducer(state, action).toJS()).toEqual({
      new: {
        isSubmitting: false,
        accountId: null,
        notifications: false,
        duration: 0,
      },
    });
  });

});
