diff --git a/frontend/regimens/__tests__/reducer_test.ts b/frontend/regimens/__tests__/reducer_test.ts index 3da4d84c9..3e5a47061 100644 --- a/frontend/regimens/__tests__/reducer_test.ts +++ b/frontend/regimens/__tests__/reducer_test.ts @@ -1,25 +1,22 @@ -import { regimensReducer, RegimenState } from "../reducer"; +import { regimensReducer, RegimenState, newWeek } from "../reducer"; import { Actions } from "../../constants"; -import { popWeek, pushWeek, selectDays, deselectDays } from "../bulk_scheduler/actions"; +import { + popWeek, pushWeek, selectDays, deselectDays, +} from "../bulk_scheduler/actions"; import { defensiveClone } from "../../util"; +import { Week } from "../bulk_scheduler/interfaces"; + +const week = newWeek(); +Object.entries(week.days).map(([day, _]: [keyof Week["days"], boolean]) => { + week.days[day] = true; +}); +week.days.day7 = false; const STATE: RegimenState = { dailyOffsetMs: 300000, selectedSequenceUUID: "Sequence.71.167", currentRegimen: "Regimen.4.56", - weeks: [ - { - "days": { - "day1": true, - "day2": true, - "day3": true, - "day4": true, - "day5": true, - "day6": true, - "day7": false - } - }, - ], + weeks: [week], schedulerOpen: false, }; diff --git a/frontend/regimens/__tests__/week_row_test.tsx b/frontend/regimens/__tests__/week_row_test.tsx deleted file mode 100644 index f4a32f6ba..000000000 --- a/frontend/regimens/__tests__/week_row_test.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import * as React from "react"; -import { render } from "enzyme"; -import { WeekRow } from "../bulk_scheduler/week_row"; -import { WeekRowProps } from "../bulk_scheduler/interfaces"; -import { betterMerge } from "../../util"; - -function weekProps(p?: Partial): WeekRowProps { - return betterMerge({ - dispatch: jest.fn(), - index: 0, - week: { - "days": { - "day1": false, - "day2": false, - "day3": false, - "day4": false, - "day5": false, - "day6": false, - "day7": false - } - } - }, p || {}); -} - -describe("", () => { - it("renders week 1 day numbers", () => { - const wrapper = render(); - const txt = wrapper.text(); - expect(txt).toEqual("Week 11234567"); - }); -}); - -describe("", () => { - it("renders week 2 day numbers", () => { - const wrapper = render(); - const txt = wrapper.text(); - expect(txt).toEqual("Week 2891011121314"); - }); -}); diff --git a/frontend/regimens/bulk_scheduler/__tests__/actions_test.ts b/frontend/regimens/bulk_scheduler/__tests__/actions_test.ts index 384afe09b..fa3895836 100644 --- a/frontend/regimens/bulk_scheduler/__tests__/actions_test.ts +++ b/frontend/regimens/bulk_scheduler/__tests__/actions_test.ts @@ -19,6 +19,7 @@ import { arrayUnwrap } from "../../../resources/util"; import { overwrite } from "../../../api/crud"; import { fakeVariableNameSet } from "../../../__test_support__/fake_variables"; import { error, warning } from "../../../toast/toast"; +import { newWeek } from "../../reducer"; const sequence_id = 23; const regimen_id = 32; @@ -53,18 +54,9 @@ describe("commitBulkEditor()", () => { state.resources.consumers.regimens.currentRegimen = regimenUuid; state.resources.consumers.regimens.selectedSequenceUUID = sequenceUuid; state.resources.consumers.regimens.dailyOffsetMs = 2000; - state.resources.consumers.regimens.weeks = [{ - days: - { - day1: true, - day2: false, - day3: false, - day4: false, - day5: false, - day6: false, - day7: false - } - }]; + const week = newWeek(); + week.days.day1 = true; + state.resources.consumers.regimens.weeks = [week]; return state; } diff --git a/frontend/regimens/bulk_scheduler/__tests__/group_regimen_items_by_week_test.ts b/frontend/regimens/bulk_scheduler/__tests__/group_regimen_items_by_week_test.ts new file mode 100644 index 000000000..4812b0628 --- /dev/null +++ b/frontend/regimens/bulk_scheduler/__tests__/group_regimen_items_by_week_test.ts @@ -0,0 +1,36 @@ +import { groupRegimenItemsByWeek } from "../group_regimen_items_by_week"; +import { fakeSequence } from "../../../__test_support__/fake_state/resources"; +import { newWeek } from "../../reducer"; + +describe("groupRegimenItemsByWeek()", () => { + it("groups regimen items by week", () => { + const sequence = fakeSequence(); + sequence.body.id = 1; + const week1 = newWeek(); + week1.days.day1 = true; + const week2 = newWeek(); + const week3 = newWeek(); + week3.days.day2 = true; + week3.days.day4 = true; + const { day1, day2, day3, day4, day5, day6, day7 } = week3.days; + week3.days = { day1, day4, day3, day2, day5, day6, day7 }; + const weeks = [week1, week2, week3]; + const result = groupRegimenItemsByWeek(weeks, 100, sequence.body); + expect(result).toEqual([ + { time_offset: 100, sequence_id: 1 }, + { time_offset: 1296000100, sequence_id: 1 }, + { time_offset: 1468800100, sequence_id: 1 }, + ]); + }); + + it("handles missing sequence id", () => { + const sequence = fakeSequence(); + sequence.body.id = undefined; + const week = newWeek(); + week.days.day1 = true; + const result = groupRegimenItemsByWeek([week], 0, sequence.body); + expect(result).toEqual([ + { time_offset: 0, sequence_id: -1 }, + ]); + }); +}); diff --git a/frontend/regimens/bulk_scheduler/__tests__/index_test.tsx b/frontend/regimens/bulk_scheduler/__tests__/index_test.tsx index 7ab18f7f1..743778b2d 100644 --- a/frontend/regimens/bulk_scheduler/__tests__/index_test.tsx +++ b/frontend/regimens/bulk_scheduler/__tests__/index_test.tsx @@ -8,20 +8,12 @@ import { import { Actions } from "../../../constants"; import { fakeSequence } from "../../../__test_support__/fake_state/resources"; import { AddButton } from "../add_button"; +import { newWeek } from "../../reducer"; describe("", () => { - const weeks = [{ - days: - { - day1: true, - day2: false, - day3: false, - day4: false, - day5: false, - day6: false, - day7: false - } - }]; + const week = newWeek(); + week.days.day1 = true; + const weeks = [week]; function fakeProps(): BulkEditorProps { const sequence = fakeSequence(); diff --git a/frontend/regimens/bulk_scheduler/__tests__/week_grid_test.tsx b/frontend/regimens/bulk_scheduler/__tests__/week_grid_test.tsx index 5b3abe037..4078f0f40 100644 --- a/frontend/regimens/bulk_scheduler/__tests__/week_grid_test.tsx +++ b/frontend/regimens/bulk_scheduler/__tests__/week_grid_test.tsx @@ -3,20 +3,12 @@ import { mount } from "enzyme"; import { WeekGrid } from "../week_grid"; import { WeekGridProps } from "../interfaces"; import { Actions } from "../../../constants"; +import { newWeek } from "../../reducer"; describe("", () => { - const weeks = [{ - days: - { - day1: true, - day2: false, - day3: false, - day4: false, - day5: false, - day6: false, - day7: false - } - }]; + const week = newWeek(); + week.days.day1 = true; + const weeks = [week]; it("renders", () => { const props: WeekGridProps = { weeks, dispatch: jest.fn() }; diff --git a/frontend/regimens/bulk_scheduler/__tests__/week_row_test.tsx b/frontend/regimens/bulk_scheduler/__tests__/week_row_test.tsx new file mode 100644 index 000000000..bccd9d845 --- /dev/null +++ b/frontend/regimens/bulk_scheduler/__tests__/week_row_test.tsx @@ -0,0 +1,36 @@ +import * as React from "react"; +import { render, mount } from "enzyme"; +import { WeekRow } from "../week_row"; +import { WeekRowProps } from "../interfaces"; +import { betterMerge } from "../../../util"; +import { newWeek } from "../../reducer"; +import { Actions } from "../../../constants"; + +describe("", () => { + const fakeProps = (p?: Partial): WeekRowProps => + betterMerge({ + dispatch: jest.fn(), + index: 0, + week: newWeek() + }, p || {}); + + it("renders week 1 day numbers", () => { + const wrapper = render(); + expect(wrapper.text()).toEqual("Week 11234567"); + }); + + it("renders week 2 day numbers", () => { + const wrapper = render(); + expect(wrapper.text()).toEqual("Week 2891011121314"); + }); + + it("selects day", () => { + const p = fakeProps(); + const wrapper = mount(); + wrapper.find("input").first().simulate("click"); + expect(p.dispatch).toHaveBeenCalledWith({ + type: Actions.TOGGLE_DAY, + payload: { week: 0, day: 1 }, + }); + }); +}); diff --git a/frontend/regimens/bulk_scheduler/week_row.tsx b/frontend/regimens/bulk_scheduler/week_row.tsx index 9653e250d..3881c9119 100644 --- a/frontend/regimens/bulk_scheduler/week_row.tsx +++ b/frontend/regimens/bulk_scheduler/week_row.tsx @@ -6,17 +6,15 @@ import { t } from "../../i18next_wrapper"; export function WeekRow({ index, dispatch, week }: WeekRowProps) { return
- { - DAYS.map(function (day, i) { - const id = `${index}-${day}`; - return ; - }) - } + {DAYS.map(function (day, i) { + const id = `${index}-${day}`; + return ; + })}
; } diff --git a/frontend/regimens/reducer.ts b/frontend/regimens/reducer.ts index 8802b9d17..0fe1501f5 100644 --- a/frontend/regimens/reducer.ts +++ b/frontend/regimens/reducer.ts @@ -12,7 +12,7 @@ export interface RegimenState { schedulerOpen: boolean; } -function newWeek() { +export function newWeek(): Week { return { days: { day1: false,