import ProviderPreference from '@/layouts/provider-preference/provider-preference.vue';

import { shallowMount } from '@vue/test-utils';
import settleAllPromises from '@/helpers/layout-helper.js';
import { fetchCmsContentForPage } from '@/helpers/cms-content-helper';
import { getMountOptions } from '@/helpers/unit-test-helper.js';
import { useMainStore } from '@/store';
import navigationScenarios from '@/router/router-constants/navigation-scenarios';

// Mock our module for promises.
jest.mock('@/helpers/layout-helper.js', () => jest.fn());

// Mock fetchCmsContentForPage
jest.mock('@/helpers/cms-content-helper', () => ({
    fetchCmsContentForPage: jest.fn(),
    setupModalLinks: jest.fn()
}));

/** @ignore */
function setupMocks(mockApiResponses) {
    const mountOptions = getMountOptions({
        router: {
            navigate: jest.fn()
        },
        route: 'provider-preference'
    });

    const wrapper = shallowMount(
        ProviderPreference,
        mountOptions
    );

    useMainStore().getCoveragePolicyInfo = jest.fn().mockImplementation(() => Promise.resolve({
        data: {}
    }));

    const apiResponses = mockApiResponses;

    settleAllPromises.mockImplementation(() => apiResponses);
    fetchCmsContentForPage.mockImplementation(() => { });

    return { wrapper };
}

describe('provider-preference.vue', () => {
    test('Should navigate to tpa disabled route page when TPAOption selected and TPA Flow disabled', () => {
    // Arrange
        const { wrapper } = setupMocks();

        // Act
        useMainStore().issConfig.enableTPAFlow = false;
        wrapper.vm.findAnotherShopClicked();

        // Test
        expect(wrapper.vm.$router.navigate).toBeCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_TPA_DISABLED, 'provider-preference');
    });

    test('Should navigate to safelite flow when navigateWithTPARecalAnswer is called with SafeliteOption', () => {
        // Arrange
        const { wrapper } = setupMocks();

        // Act
        wrapper.vm.navigateWithTPARecalAnswer('SafeliteOption');

        // Test
        expect(wrapper.vm.$router.navigate).toBeCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, 'provider-preference');
    });

    test('Should navigate to TPA flow when navigateWithTPARecalAnswer is called with TPAOption', () => {
        // Arrange
        const { wrapper } = setupMocks();

        // Act
        wrapper.vm.navigateWithTPARecalAnswer('TPAOption');

        // Test
        expect(wrapper.vm.$router.navigate).toBeCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_TPA_ENABLED, 'provider-preference');
    });
});
