import { ApprovalType } from '@metamask/controller-utils';
import { getApprovalFlows, hasPendingApprovals } from './approvals';

describe('approval selectors', () => {
  const mockedState = {
    metamask: {
      pendingApprovalCount: 3,
      pendingApprovals: {
        '1': {
          id: '1',
          origin: 'origin',
          time: Date.now(),
          type: ApprovalType.WatchAsset,
          requestData: {},
          requestState: null,
          expectsResult: false,
        },
        '2': {
          id: '2',
          origin: 'origin',
          time: Date.now(),
          type: ApprovalType.Transaction,
          requestData: {},
          requestState: null,
          expectsResult: false,
        },
      },
      approvalFlows: [
        {
          id: '1',
          loadingText: 'loadingText1',
        },
        {
          id: '2',
          loadingText: 'loadingText2',
        },
      ],
    },
  };

  describe('hasPendingApprovals', () => {
    it('should return true if there is a pending approval request', () => {
      const result = hasPendingApprovals(mockedState, ApprovalType.WatchAsset);

      expect(result).toBe(true);
    });

    it('should return false if there is no pending approval request', () => {
      const result = hasPendingApprovals(
        mockedState,
        ApprovalType.SnapDialogPrompt,
      );

      expect(result).toBe(false);
    });
  });

  describe('getApprovalFlows', () => {
    it('should return existing approval flows', () => {
      const result = getApprovalFlows(mockedState);

      expect(result).toStrictEqual(mockedState.metamask.approvalFlows);
    });
  });
});