add more farm event tests

This commit is contained in:
gabrielburnworth 2017-10-16 20:20:34 -07:00
parent 665b27b30b
commit 5b59d18999
3 changed files with 208 additions and 0 deletions

View file

@ -0,0 +1,51 @@
jest.mock("react-redux", () => ({
connect: jest.fn()
}));
jest.mock("../../../history", () => ({
history: {
push: jest.fn()
}
}));
import * as React from "react";
import { mount } from "enzyme";
import { AddFarmEvent } from "../add_farm_event";
import { AddEditFarmEventProps } from "../../interfaces";
import { fakeFarmEvent, fakeSequence } from "../../../__test_support__/fake_state/resources";
describe("<AddFarmEvent />", () => {
function fakeProps(): AddEditFarmEventProps {
const sequence = fakeSequence();
sequence.body.id = 1;
const farmEvent = fakeFarmEvent("Sequence", 1);
farmEvent.uuid = "farm_events";
return {
deviceTimezone: "",
dispatch: jest.fn(),
regimensById: {},
sequencesById: { "1": sequence },
farmEventsById: { "1": farmEvent },
executableOptions: [],
repeatOptions: [],
formatDate: jest.fn(),
formatTime: jest.fn(),
handleTime: jest.fn(),
farmEvents: [farmEvent],
getFarmEvent: () => farmEvent,
findExecutable: () => sequence
};
}
it("renders", () => {
const wrapper = mount(<AddFarmEvent {...fakeProps() } />);
wrapper.setState({ uuid: "farm_events" });
["Add Farm Event", "Sequence or Regimen", "fake"].map(string =>
expect(wrapper.text()).toContain(string));
});
it("redirects", () => {
const wrapper = mount(<AddFarmEvent {...fakeProps() } />);
expect(wrapper.text()).toContain("Loading");
});
});

View file

@ -0,0 +1,50 @@
jest.mock("react-redux", () => ({
connect: jest.fn()
}));
jest.mock("../../../history", () => ({
history: {
push: jest.fn()
}
}));
import * as React from "react";
import { mount } from "enzyme";
import { EditFarmEvent } from "../edit_farm_event";
import { AddEditFarmEventProps } from "../../interfaces";
import { fakeFarmEvent, fakeSequence } from "../../../__test_support__/fake_state/resources";
describe("<EditFarmEvent />", () => {
function fakeProps(): AddEditFarmEventProps {
const sequence = fakeSequence();
sequence.body.id = 1;
return {
deviceTimezone: "",
dispatch: jest.fn(),
regimensById: {},
sequencesById: { "1": sequence },
farmEventsById: { "1": fakeFarmEvent("Sequence", 1) },
executableOptions: [],
repeatOptions: [],
formatDate: jest.fn(),
formatTime: jest.fn(),
handleTime: jest.fn(),
farmEvents: [],
getFarmEvent: () => fakeFarmEvent("Sequence", 1),
findExecutable: () => sequence
};
}
it("renders", () => {
const wrapper = mount(<EditFarmEvent {...fakeProps() } />);
["Edit Farm Event", "Sequence or Regimen", "fake"].map(string =>
expect(wrapper.text()).toContain(string));
});
it("redirects", () => {
const p = fakeProps();
p.getFarmEvent = jest.fn();
const wrapper = mount(<EditFarmEvent {...p } />);
expect(wrapper.text()).toContain("Loading");
});
});

View file

@ -0,0 +1,107 @@
import { mapStateToProps } from "../map_state_to_props";
import { fakeState } from "../../../__test_support__/fake_state";
import {
fakeSequence,
fakeRegimen,
fakeFarmEvent
} from "../../../__test_support__/fake_state/resources";
import { buildResourceIndex } from "../../../__test_support__/resource_index_builder";
import * as moment from "moment";
describe("mapStateToProps()", () => {
function testState(time: number) {
const sequence = fakeSequence();
sequence.body.id = 1;
sequence.body.body = [{ kind: "take_photo", args: {} }];
const regimen = fakeRegimen();
regimen.body.id = 1;
regimen.body.regimen_items = [{
sequence_id: 1,
time_offset: moment(time).add(10, "minutes")
.diff(moment(time).clone().startOf("day"), "milliseconds")
}];
const getFutureTime = (t: number, value: number, label: string) =>
// tslint:disable-next-line:no-any
moment(t).add(value as any, label).toISOString();
const sequenceFarmEvent = fakeFarmEvent("Sequence", 1);
sequenceFarmEvent.body.id = 1;
const plusOneDay = moment(getFutureTime(time, 1, "day")).valueOf();
sequenceFarmEvent.body.start_time = getFutureTime(plusOneDay, 2, "minutes");
sequenceFarmEvent.body.end_time = getFutureTime(plusOneDay, 3, "minutes");
const regimenFarmEvent = fakeFarmEvent("Regimen", 1);
regimenFarmEvent.body.id = 2;
const plusTwoDays = moment(getFutureTime(time, 2, "days")).valueOf();
regimenFarmEvent.body.start_time = getFutureTime(plusTwoDays, 1, "minute");
regimenFarmEvent.body.end_time = getFutureTime(plusTwoDays, 2, "minutes");
const fakeResources = [
sequence,
regimen,
sequenceFarmEvent,
regimenFarmEvent
];
const state = fakeState();
state.resources = buildResourceIndex(fakeResources);
return state;
}
it("returns calendar rows", () => {
const testTime = moment().startOf("hour").valueOf();
const { calendarRows, push } = mapStateToProps(testState(testTime));
// Day 1: Sequence Farm Event
const day1 = calendarRows[0];
const day1Time = moment(testTime).add(1, "day");
expect(day1.year).toEqual(day1Time.year() - 2000);
expect(day1.month).toEqual(day1Time.format("MMM"));
expect(day1.day).toEqual(day1Time.date());
const day1ItemTime = day1Time.add(2, "minutes");
expect(day1.sortKey).toEqual(day1ItemTime.unix());
expect(day1.items).toEqual([{
executableId: 1,
heading: "fake",
id: 1,
mmddyy: day1ItemTime.format("MMDDYY"),
sortKey: day1ItemTime.unix(),
timeStr: day1ItemTime.format("hh:mma")
}]);
// Day 2: Regimen Farm Event
const day2 = calendarRows[1];
const day2Time = moment(testTime).add(2, "days");
expect(day2.year).toEqual(day2Time.year() - 2000);
expect(day2.month).toEqual(day2Time.format("MMM"));
expect(day2.day).toEqual(day2Time.date());
// Regimen
const regimenStartTime = day2Time.clone().add(1, "minutes");
expect(day2.sortKey).toEqual(regimenStartTime.unix());
expect(day2.items[0]).toEqual({
executableId: 1,
heading: "Foo",
id: 2,
mmddyy: regimenStartTime.format("MMDDYY"),
sortKey: regimenStartTime.unix(),
subheading: "",
timeStr: regimenStartTime.format("hh:mma")
});
// Regimen Item
const regimenItemTime = day2Time.clone().add(10, "minutes");
expect(day2.items[1]).toEqual({
executableId: 1,
heading: "Foo",
id: 2,
mmddyy: regimenItemTime.format("MMDDYY"),
sortKey: regimenItemTime.unix(),
subheading: "fake",
timeStr: regimenItemTime.format("hh:mma")
});
expect(push).toBeTruthy();
});
});