jest.mock("../../../../api/crud", () => ({ overwrite: jest.fn(), save: jest.fn(), })); import React from "react"; import { mount, shallow } from "enzyme"; import { EqCriteriaSelection, NumberCriteriaSelection, DaySelection, LocationSelection, AddCriteria, } from ".."; import { EqCriteriaSelectionProps, NumberCriteriaProps, CriteriaSelectionProps, DEFAULT_CRITERIA, LocationSelectionProps, GroupCriteriaProps } from "../interfaces"; import { fakePointGroup } from "../../../../__test_support__/fake_state/resources"; import { overwrite } from "../../../../api/crud"; import { cloneDeep } from "lodash"; import { FBSelect } from "../../../../ui"; import { PointGroup } from "farmbot/dist/resources/api_resources"; describe(" />", () => { const fakeProps = (): EqCriteriaSelectionProps => ({ criteria: DEFAULT_CRITERIA, group: fakePointGroup(), dispatch: jest.fn(x => x(jest.fn())), type: "string", criteriaField: {}, criteriaKey: "string_eq", }); it("renders", () => { const p = fakeProps(); const wrapper = mount( {...p} />); expect(wrapper.text()).toContain("="); }); it("removes criteria", () => { const p = fakeProps(); p.criteriaField = { openfarm_slug: ["slug"] }; const wrapper = mount( {...p} />); wrapper.find("button").last().simulate("click"); const expectedBody = cloneDeep(p.group.body); expectedBody.criteria.string_eq = {}; expect(overwrite).toHaveBeenCalledWith(p.group, expectedBody); }); }); describe("", () => { const fakeProps = (): NumberCriteriaProps => ({ criteria: DEFAULT_CRITERIA, group: fakePointGroup(), dispatch: jest.fn(x => x(jest.fn())), criteriaKey: "number_lt", }); it("renders", () => { const p = fakeProps(); const wrapper = mount(); expect(wrapper.text()).toContain("<"); }); it("removes criteria", () => { const p = fakeProps(); p.criteria.number_lt = { x: 1 }; const wrapper = mount(); wrapper.find("button").last().simulate("click"); const expectedBody = cloneDeep(p.group.body); expectedBody.criteria.number_lt = {}; expect(overwrite).toHaveBeenCalledWith(p.group, expectedBody); }); }); describe("", () => { const fakeProps = (): CriteriaSelectionProps => ({ criteria: DEFAULT_CRITERIA, group: fakePointGroup(), dispatch: jest.fn(x => x(jest.fn())), }); it("changes operator", () => { const p = fakeProps(); const wrapper = shallow(); wrapper.find(FBSelect).simulate("change", { label: "", value: "<" }); const expectedBody = cloneDeep(p.group.body); expectedBody.criteria.day.op = "<"; expect(overwrite).toHaveBeenCalledWith(p.group, expectedBody); }); it("changes day value", () => { const p = fakeProps(); const wrapper = shallow(); wrapper.find("input").last().simulate("change", { currentTarget: { value: "1" } }); const expectedBody = cloneDeep(p.group.body); expectedBody.criteria.day.days_ago = 1; expect(overwrite).toHaveBeenCalledWith(p.group, expectedBody); }); it("handles missing criteria", () => { const p = fakeProps(); p.criteria = {} as PointGroup["criteria"]; const wrapper = shallow(); expect(wrapper.find("input").last().props().value).toEqual(0); }); }); describe("", () => { const fakeProps = (): LocationSelectionProps => ({ criteria: DEFAULT_CRITERIA, group: fakePointGroup(), dispatch: jest.fn(x => x(jest.fn())), }); it("changes number_gt", () => { const p = fakeProps(); const wrapper = shallow(); wrapper.find("input").first().simulate("blur", { currentTarget: { value: "1" } }); const expectedBody = cloneDeep(p.group.body); expectedBody.criteria.number_gt = { x: 1 }; expect(overwrite).toHaveBeenCalledWith(p.group, expectedBody); }); it("changes number_lt", () => { const p = fakeProps(); const wrapper = shallow(); wrapper.find("input").last().simulate("blur", { currentTarget: { value: "1" } }); const expectedBody = cloneDeep(p.group.body); expectedBody.criteria.number_lt = { x: 1, y: 1 }; expect(overwrite).toHaveBeenCalledWith(p.group, expectedBody); }); it("handles missing criteria", () => { const p = fakeProps(); p.criteria = {} as PointGroup["criteria"]; const wrapper = shallow(); expect(wrapper.find("input").first().props().defaultValue).toEqual(undefined); expect(wrapper.find("input").last().props().defaultValue).toEqual(undefined); }); }); describe("", () => { const fakeProps = (): GroupCriteriaProps => ({ slugs: [], group: fakePointGroup(), dispatch: jest.fn(x => x(jest.fn(y => y(jest.fn())))), }); it("renders", () => { const p = fakeProps(); p.group.body.criteria.string_eq = { openfarm_slug: ["slug"], pointer_type: ["Plant"], plant_stage: ["planted"], }; const wrapper = mount(); expect(wrapper.find("input").at(0).props().value).toEqual("Plant Type"); expect(wrapper.find("input").at(1).props().value).toEqual("Slug"); expect(wrapper.find("input").at(2).props().value).toEqual("Point Type"); expect(wrapper.find("input").at(3).props().value).toEqual("Plants"); expect(wrapper.find("input").at(4).props().value).toEqual("Plant Status"); expect(wrapper.find("input").at(5).props().value).toEqual("Planted"); }); it("removes criteria", () => { const p = fakeProps(); p.group.body.criteria.string_eq = { openfarm_slug: ["slug"], pointer_type: ["Plant"], plant_stage: ["planted"], }; const wrapper = mount(); wrapper.find("button").last().simulate("click"); const expectedBody = cloneDeep(p.group.body); expectedBody.criteria.string_eq = { openfarm_slug: ["slug"], pointer_type: ["Plant"], }; expect(overwrite).toHaveBeenCalledWith(p.group, expectedBody); }); it("handles missing criteria", () => { const p = fakeProps(); p.group.body.criteria = undefined as unknown as PointGroup["criteria"]; const wrapper = mount(); expect(wrapper.text()).toEqual("SelectNone"); }); });