department-of-veterans-affairs/vets-website

View on GitHub
src/applications/hca/utils/helpers/enrollment-status.js

Summary

Maintainability
A
1 hr
Test Coverage
import appendQuery from 'append-query';
import { apiRequest } from '~/platform/utilities/api';
import {
  API_ENDPOINTS,
  ENROLLMENT_STATUS_ACTIONS,
  MOCK_ENROLLMENT_RESPONSE,
} from '../constants';

/**
 * Provide a mocked 404 response when calling the API endpoint
 * @param {Function} dispatch - tells the enrollment status reducer what
 * dataset to return
 */
export async function callFake404(dispatch) {
  const { FETCH_ENROLLMENT_STATUS_FAILED } = ENROLLMENT_STATUS_ACTIONS;
  await new Promise(resolve => {
    setTimeout(() => {
      resolve();
    }, 1000);
  });
  dispatch({
    type: FETCH_ENROLLMENT_STATUS_FAILED,
    errors: [{ code: '404' }],
  });
}

/**
 * Provide a mocked 200 response when calling the API endpoint
 * @param {Function} dispatch - tells the enrollment status reducer what
 * dataset to return
 * @param {String} status - the specific status code to use in the response
 */
export async function callFakeSuccess(dispatch, status) {
  const { FETCH_ENROLLMENT_STATUS_SUCCEEDED } = ENROLLMENT_STATUS_ACTIONS;
  await new Promise(resolve => {
    setTimeout(() => {
      resolve();
    }, 1000);
  });
  dispatch({
    type: FETCH_ENROLLMENT_STATUS_SUCCEEDED,
    response: {
      ...MOCK_ENROLLMENT_RESPONSE,
      parsedStatus: status,
    },
  });
}

/**
 * Call the API endpoint
 * @param {Function} dispatch - tells the enrollment status reducer what
 * dataset to return
 * @param {Object} formData - data object from the identity verification
 * form
 */
export function callAPI(dispatch, formData = {}) {
  const {
    FETCH_ENROLLMENT_STATUS_SUCCEEDED,
    FETCH_ENROLLMENT_STATUS_FAILED,
  } = ENROLLMENT_STATUS_ACTIONS;
  const requestUrl = appendQuery(API_ENDPOINTS.enrollmentStatus, {
    'userAttributes[veteranDateOfBirth]': formData.dob,
    'userAttributes[veteranFullName][first]': formData.firstName,
    'userAttributes[veteranFullName][last]': formData.lastName,
    'userAttributes[veteranSocialSecurityNumber]': formData.ssn,
  });

  return apiRequest(requestUrl)
    .then(response =>
      dispatch({ type: FETCH_ENROLLMENT_STATUS_SUCCEEDED, response }),
    )
    .catch(({ errors }) =>
      dispatch({ type: FETCH_ENROLLMENT_STATUS_FAILED, errors }),
    );
}