Skip to content

Commit

Permalink
Refactor card footer (#1373)
Browse files Browse the repository at this point in the history
  • Loading branch information
sastels authored Oct 26, 2018
1 parent e5cfde3 commit 26266c0
Show file tree
Hide file tree
Showing 10 changed files with 75 additions and 34 deletions.
4 changes: 3 additions & 1 deletion __tests__/components/benefit_card_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import eligibilityPathsFixture from "../fixtures/eligibilityPaths";
import { BenefitCard } from "../../components/benefit_cards";
import benefitsFixture from "../fixtures/benefits";
import needsFixture from "../fixtures/needs";
import multipleChoiceOptionsFixture from "../fixtures/multiple_choice_options";

const { axe, toHaveNoViolations } = require("jest-axe");
expect.extend(toHaveNoViolations);
Expand Down Expand Up @@ -49,7 +50,8 @@ describe("BenefitCard", () => {
selectedNeeds: {},
benefits: benefitsFixture,
favouriteBenefits: [],
eligibilityPaths: eligibilityPathsFixture
eligibilityPaths: eligibilityPathsFixture,
multipleChoiceOptions: multipleChoiceOptionsFixture
};
props.store = mockStore(reduxData);

Expand Down
2 changes: 2 additions & 0 deletions __tests__/components/benefit_list_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ expect.extend(toHaveNoViolations);

import benefitsFixture from "../fixtures/benefits";
import eligibilityPathsFixture from "../fixtures/eligibilityPaths";
import multipleChoiceOptionsFixture from "../fixtures/multiple_choice_options";

import configureStore from "redux-mock-store";
import needsFixture from "../fixtures/needs";
Expand All @@ -31,6 +32,7 @@ describe("BenefitList", () => {
benefits: benefitsFixture,
favouriteBenefits: [],
eligibilityPaths: eligibilityPathsFixture,
multipleChoiceOptions: multipleChoiceOptionsFixture,
needs: needsFixture,
selectedNeeds: {}
};
Expand Down
8 changes: 5 additions & 3 deletions __tests__/components/benefit_pane_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import benefitsFixture from "../fixtures/benefits";
import eligibilityPathsFixture from "../fixtures/eligibilityPaths";
import needsFixture from "../fixtures/needs";
import questionsFixture from "../fixtures/questions";
import multipleChoiceOptionsFixture from "../fixtures/multiple_choice_options";

const { axe, toHaveNoViolations } = require("jest-axe");
expect.extend(toHaveNoViolations);
Expand Down Expand Up @@ -51,6 +52,7 @@ describe("BenefitsPane", () => {
benefits: benefitsFixture,
favouriteBenefits: [],
eligibilityPaths: eligibilityPathsFixture,
multipleChoiceOptions: multipleChoiceOptionsFixture,
filteredBenefits: benefitsFixture,
needs: needsFixture,
searchString: "",
Expand Down Expand Up @@ -118,10 +120,10 @@ describe("BenefitsPane", () => {
).toEqual(0);
});

it("returns 1 if one selectedEligibilty is selected", () => {
it("returns 1 if one selectedEligibility is selected", () => {
mounted().setProps({
profileFilters: {
patronType: eligibilityPathsFixture[0].patronType
patronType: "p1"
}
});
expect(
Expand All @@ -148,7 +150,7 @@ describe("BenefitsPane", () => {
mounted().setProps({ selectedNeeds: needsSelection });
mounted().setProps({
profileFilters: {
patronType: eligibilityPathsFixture[0].patronType
patronType: "p1"
}
});
expect(
Expand Down
26 changes: 17 additions & 9 deletions __tests__/components/card_footer_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import React from "react";
import { mount } from "enzyme";
import configureStore from "redux-mock-store";
import eligibilityPathsFixture from "../fixtures/eligibilityPaths";
import multipleChoiceOptionsFixture from "../fixtures/multiple_choice_options";
import { CardFooter } from "../../components/card_footer";
import benefitsFixture from "../fixtures/benefits";
const { axe, toHaveNoViolations } = require("jest-axe");
Expand All @@ -19,7 +20,8 @@ describe("CardFooter", () => {
mockStore = configureStore();
reduxData = {
benefits: benefitsFixture,
eligibilityPaths: eligibilityPathsFixture
eligibilityPaths: eligibilityPathsFixture,
multipleChoiceOptions: multipleChoiceOptionsFixture
};
props.store = mockStore(reduxData);

Expand Down Expand Up @@ -90,14 +92,20 @@ describe("CardFooter", () => {
expect(mounted.state().open).toEqual(true);
});

it("has a correct getBenefitIds function", () => {
expect(
mount(<CardFooter {...props} {...reduxData} />)
.instance()
.getBenefitIds(reduxData.eligibilityPaths)
).toEqual({
veteran: new Set(["benefit_0", "benefit_2"]),
family: new Set(["benefit_2"])
describe("getBenefitIds", () => {
it("finds service person and family benefits", () => {
expect(
mount(<CardFooter {...props} {...reduxData} />)
.instance()
.getBenefitIds(
reduxData.eligibilityPaths,
["mco_p2", "mco_p3"],
["mco_p2"]
)
).toEqual({
veteran: new Set(["benefit_1", "benefit_2", "benefit_3"]),
family: new Set(["benefit_2"])
});
});
});

Expand Down
12 changes: 4 additions & 8 deletions __tests__/fixtures/eligibilityPaths.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,22 @@ const eligibilityPathsFixture = [
{
id: "ep_0",
requirements: ["mco_p1", "mco_s1"],
benefits: ["benefit_0", "benefit_2"],
patronType: "service-person"
benefits: ["benefit_0", "benefit_2"]
},
{
id: "ep_1",
requirements: ["mco_p2"],
benefits: ["benefit_2"],
patronType: "family"
benefits: ["benefit_2"]
},
{
id: "ep_2",
requirements: ["mco_p3"],
benefits: ["benefit_1", "benefit_3"],
patronType: "organization"
benefits: ["benefit_1", "benefit_3"]
},
{
id: "ep_3",
requirements: ["mco_p1", "mco_s2"],
benefits: ["benefit_3", "benefit_1"],
patronType: "organization"
benefits: ["benefit_3", "benefit_1"]
}
];

Expand Down
2 changes: 2 additions & 0 deletions __tests__/pages/all-benefits_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { AllBenefits } from "../../pages/all-benefits";
import benefitsFixture from "../fixtures/benefits";
import eligibilityPathsFixture from "../fixtures/eligibilityPaths";
import needsFixture from "../fixtures/needs";
import multipleChoiceOptionsFixture from "../fixtures/multiple_choice_options";
import translate from "../fixtures/translate";
import configureStore from "redux-mock-store";

Expand Down Expand Up @@ -46,6 +47,7 @@ describe("AllBenefits", () => {
cookiesDisabled: false,
benefits: benefitsFixture,
eligibilityPaths: eligibilityPathsFixture,
multipleChoiceOptions: multipleChoiceOptionsFixture,
needs: needsFixture,
searchString: "",
selectedNeeds: {},
Expand Down
48 changes: 37 additions & 11 deletions components/card_footer.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import EmbeddedBenefitCard from "./embedded_benefit_card";
import { cx, css } from "react-emotion";
import { connect } from "react-redux";
import { globalTheme } from "../theme";
var constants = require("../utils/hardcoded_strings");

const headerDesc = css`
flex-grow: 1;
Expand Down Expand Up @@ -117,17 +118,25 @@ export class CardFooter extends Component {
return matchingBenefits;
};

getBenefitIds = eligibilityPaths => {
getBenefitIds = (
eligibilityPaths,
servicePersonOptionIds,
familyOptionIds
) => {
let veteranBenefitIds = [];
let familyBenefitIds = [];

eligibilityPaths.forEach(ep => {
if (ep.patronType === "service-person") {
veteranBenefitIds = veteranBenefitIds.concat(ep.benefits);
}
if (ep.patronType === "family") {
familyBenefitIds = familyBenefitIds.concat(ep.benefits);
}
servicePersonOptionIds.forEach(id => {
if (ep.requirements && ep.requirements.indexOf(id) !== -1) {
veteranBenefitIds = veteranBenefitIds.concat(ep.benefits);
}
});
familyOptionIds.forEach(id => {
if (ep.requirements && ep.requirements.indexOf(id) !== -1) {
familyBenefitIds = familyBenefitIds.concat(ep.benefits);
}
});
});
return {
veteran: new Set(veteranBenefitIds),
Expand All @@ -140,7 +149,22 @@ export class CardFooter extends Component {
const childBenefits = benefit.childBenefits
? benefits.filter(ab => benefit.childBenefits.indexOf(ab.id) > -1)
: [];
const benefitIds = this.getBenefitIds(this.props.eligibilityPaths);

const servicePersonOptionIds = this.props.multipleChoiceOptions
.filter(
mco => constants.servicePersonOptions.indexOf(mco.variable_name) !== -1
)
.map(mco => mco.id);

const familyOptionIds = this.props.multipleChoiceOptions
.filter(mco => constants.familyOptions.indexOf(mco.variable_name) !== -1)
.map(mco => mco.id);

const benefitIds = this.getBenefitIds(
this.props.eligibilityPaths,
servicePersonOptionIds,
familyOptionIds
);
const veteranBenefits = this.getMatchingBenefits(
childBenefits,
benefitIds.veteran
Expand Down Expand Up @@ -229,15 +253,17 @@ export class CardFooter extends Component {
}
const mapStateToProps = reduxState => {
return {
benefits: reduxState.benefits,
eligibilityPaths: reduxState.eligibilityPaths,
benefits: reduxState.benefits
multipleChoiceOptions: reduxState.multipleChoiceOptions
};
};
CardFooter.propTypes = {
benefit: PropTypes.object.isRequired,
benefits: PropTypes.array.isRequired,
t: PropTypes.func.isRequired,
eligibilityPaths: PropTypes.array.isRequired,
multipleChoiceOptions: PropTypes.array.isRequired,
benefit: PropTypes.object.isRequired,
t: PropTypes.func.isRequired,
store: PropTypes.object
};

Expand Down
2 changes: 1 addition & 1 deletion store.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import lunr from "lunr";
import stemmerSupport from "lunr-languages/lunr.stemmer.support.js";
import fr from "lunr-languages/lunr.fr.js";
import { createStore } from "redux";
import airtableConstants from "./utils/airtable_constants";
import airtableConstants from "./utils/hardcoded_strings";

stemmerSupport(lunr);
fr(lunr);
Expand Down
2 changes: 1 addition & 1 deletion utils/airtable_es2015.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const Logger = require("./logger").default;

exports.hydrateFromAirtable = exports.writeFeedback = undefined;

var airtableConstants = require("./airtable_constants");
var airtableConstants = require("./hardcoded_strings");
var readKey = process.env.AIRTABLE_READ_KEY;
var writeKey = process.env.AIRTABLE_WRITE_KEY;
var baseKey = process.env.AIRTABLE_BASE_KEY || "appoFDwVvNMRSaO6o";
Expand Down
3 changes: 3 additions & 0 deletions utils/airtable_constants.js → utils/hardcoded_strings.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,6 @@ exports.tableNames = [
"questionDisplayLogic",
"questionClearLogic"
];

exports.servicePersonOptions = ["veteran", "servingMember"];
exports.familyOptions = ["family"];

0 comments on commit 26266c0

Please sign in to comment.