department-of-veterans-affairs/vets-website

View on GitHub
src/applications/representative-appoint/mocks/endpoints/feature-toggles/index.js

Summary

Maintainability
C
1 day
Test Coverage
const { snakeCase } = require('lodash');

// add and remove feature toggles here by name, but generally keep all values as false
// instead use generateFeatureToggles in server.js to set the toggle values
const toggleList = {
  appointARepresentativeEnabled: true,
};

const makeAllTogglesTrue = toggles => {
  const result = { ...toggles };
  Object.keys(result).forEach(key => {
    result[key] = true;
  });
  return result;
};

/**
 * Generates feature toggles mock api response object for profile app
 *
 * @param {*} values - set specific values to true or false
 * @param {*} allOn - set all values to true
 * @returns
 */
const generateFeatureToggles = (values = toggleList, allOn = false) => {
  const toggles = allOn
    ? makeAllTogglesTrue(toggleList)
    : { ...toggleList, ...values };

  const togglesCamelCased = Object.entries(toggles).map(([key, value]) => {
    return {
      name: key,
      value,
    };
  });

  const togglesSnakeCased = Object.entries(toggles).map(([key, value]) => {
    return {
      name: snakeCase(key),
      value,
    };
  });

  return {
    data: {
      type: 'feature_toggles',
      features: [...togglesSnakeCased, ...togglesCamelCased],
    },
  };
};

const generateFeatureTogglesState = (values = toggleList, allOn = false) => {
  return {
    featureToggles: generateFeatureToggles(values, allOn).data.features.reduce(
      (acc, cur) => {
        acc[cur.name] = cur.value;
        return acc;
      },
      { loading: false },
    ),
  };
};

module.exports = { generateFeatureToggles, generateFeatureTogglesState };