MetaPhase-Consulting/State-TalentMAP

View on GitHub
src/actions/homePagePositions.test.js

Summary

Maintainability
A
0 mins
Test Coverage
import { setupAsyncMocks } from '../testUtilities/testUtilities';
import {
  FAVORITE_POSITIONS_QUERY,
  GET_FEATURED_GRADE_AND_SKILL_POSITIONS_QUERY,
  GET_FEATURED_GRADE_POSITIONS_QUERY,
  GET_FEATURED_POSITIONS_QUERY,
  GET_RECOMMENDED_GRADE_AND_SKILL_CODE_POSITIONS_QUERY,
  GET_RECOMMENDED_GRADE_POSITIONS_QUERY,
  homePageFeaturedPositionsFetchData,
  homePageFeaturedPositionsIsLoading,
  homePageRecommendedPositionsFetchData,
  homePageRecommendedPositionsIsLoading,
} from './homePagePositions';
import resultsObject from '../__mocks__/resultsObject';

const { mockStore, mockAdapter } = setupAsyncMocks();

// set test values
const TEST_SKILL_CODES = [{ id: 100 }, { id: 200 }];
const TEST_SKILL_CODES_STRING = TEST_SKILL_CODES.join(',');
const TEST_GRADE_CODE = '03';

// set queries to test against
const queries = [
  GET_RECOMMENDED_GRADE_AND_SKILL_CODE_POSITIONS_QUERY(TEST_SKILL_CODES_STRING, TEST_GRADE_CODE),
  GET_RECOMMENDED_GRADE_POSITIONS_QUERY(TEST_GRADE_CODE),
  FAVORITE_POSITIONS_QUERY,
  GET_FEATURED_GRADE_AND_SKILL_POSITIONS_QUERY(TEST_SKILL_CODES_STRING, TEST_GRADE_CODE),
  GET_FEATURED_GRADE_POSITIONS_QUERY(TEST_GRADE_CODE),
  GET_FEATURED_POSITIONS_QUERY,
];

describe('async actions', () => {
  beforeEach(() => {
    mockAdapter.reset();

    queries.forEach(query =>
      mockAdapter.onGet(`${query}`).reply(200,
        resultsObject,
      ),
    );
  });

  it('fetches positions when skill and grade are not defined', (done) => {
    const store = mockStore({ results: [] });

    const f = () => {
      setTimeout(() => {
        store.dispatch(homePageRecommendedPositionsFetchData());
        store.dispatch(homePageRecommendedPositionsIsLoading());
        store.dispatch(homePageFeaturedPositionsFetchData());
        store.dispatch(homePageFeaturedPositionsIsLoading());
        done();
      }, 0);
    };
    f();
  });

  it('fetches positions when skill and grade exist', (done) => {
    const store = mockStore({ results: [] });

    const f = () => {
      setTimeout(() => {
        store.dispatch(homePageRecommendedPositionsFetchData(TEST_SKILL_CODES, TEST_GRADE_CODE));
        store.dispatch(homePageRecommendedPositionsIsLoading());
        store.dispatch(homePageFeaturedPositionsFetchData(TEST_SKILL_CODES, TEST_GRADE_CODE));
        store.dispatch(homePageFeaturedPositionsIsLoading());
        done();
      }, 0);
    };
    f();
  });

  it('handles errors fetching positions when skill and grade are not defined', (done) => {
    const store = mockStore({ results: [] });

    mockAdapter.reset();

    queries.forEach(query =>
      mockAdapter.onGet(`/cycleposition/${query}`).reply(404,
        null,
      ),
    );

    const f = () => {
      setTimeout(() => {
        store.dispatch(homePageRecommendedPositionsFetchData());
        store.dispatch(homePageRecommendedPositionsIsLoading());
        store.dispatch(homePageFeaturedPositionsFetchData());
        store.dispatch(homePageFeaturedPositionsIsLoading());
        done();
      }, 0);
    };
    f();
  });

  it('handles errors fetching positions when skill and grade exist', (done) => {
    const store = mockStore({ results: [] });

    mockAdapter.reset();

    queries.forEach(query =>
      mockAdapter.onGet(`/cycleposition/${query}`).reply(404,
        null,
      ),
    );

    const f = () => {
      setTimeout(() => {
        store.dispatch(homePageRecommendedPositionsFetchData(TEST_SKILL_CODES, TEST_GRADE_CODE));
        store.dispatch(homePageRecommendedPositionsIsLoading());
        store.dispatch(homePageFeaturedPositionsFetchData(TEST_SKILL_CODES, TEST_GRADE_CODE));
        store.dispatch(homePageFeaturedPositionsIsLoading());
        done();
      }, 0);
    };
    f();
  });
});