Farmbot-Web-App/frontend/farm_designer/plants/grid/__tests__/plant_grid_test.tsx

95 lines
3.0 KiB
TypeScript

jest.mock("../thunks", () => ({
saveGrid: jest.fn(() => "SAVE_GRID_MOCK"),
stashGrid: jest.fn(() => "STASH_GRID_MOCK")
}));
import * as React from "react";
import { mount } from "enzyme";
import { PlantGrid } from "../plant_grid";
import { saveGrid, stashGrid } from "../thunks";
import { error, success } from "../../../../toast/toast";
describe("PlantGrid", () => {
function fakeProps() {
return {
xy_swap: true,
openfarm_slug: "beets",
cropName: "Beets",
dispatch: jest.fn(() => Promise.resolve({})),
};
}
it("renders", () => {
const p = fakeProps();
const el = mount<PlantGrid>(<PlantGrid {...p} />);
// Upon load, there should be one button.
const previewButton = el.find("a.preview-button");
expect(previewButton.text()).toContain("Preview");
previewButton.simulate("click");
// After clicking PREVIEW, there should be two buttons.
const cancel = el.find("a.cancel-button");
const save = el.find("a.save-button");
expect(cancel.text()).toContain("Cancel");
expect(save.text()).toContain("Save");
expect(el.state().status).toEqual("dirty");
});
it("saves a grid", async () => {
const props = fakeProps();
const pg = mount<PlantGrid>(<PlantGrid {...props} />).instance();
const oldId = pg.state.gridId;
await pg.saveGrid();
expect(saveGrid).toHaveBeenCalledWith(oldId);
expect(success).toHaveBeenCalledWith("16 plants added.");
expect(pg.state.gridId).not.toEqual(oldId);
});
it("stashes a grid", async () => {
const props = fakeProps();
const pg = mount<PlantGrid>(<PlantGrid {...props} />).instance();
await pg.revertPreview();
expect(stashGrid).toHaveBeenCalledWith(pg.state.gridId);
});
it("prevents creation of grids with > 100 plants", () => {
const props = fakeProps();
const pg = mount<PlantGrid>(<PlantGrid {...props} />).instance();
pg.setState({
...pg.state,
grid: {
...pg.state.grid,
numPlantsH: 10,
numPlantsV: 11
}
});
pg.performPreview();
expect(error).toHaveBeenCalledWith("Please make a grid with less than 100 plants");
});
it("discards unsaved changes", async () => {
window.confirm = jest.fn(() => false);
const props = fakeProps();
const pg = mount<PlantGrid>(<PlantGrid {...props} />).instance();
pg.setState({ ...pg.state, status: "dirty" });
pg.componentWillUnmount();
expect(pg.props.dispatch).toHaveBeenCalledWith("STASH_GRID_MOCK");
});
it("keeps unsaved changes", () => {
window.confirm = jest.fn(() => true);
const props = fakeProps();
const pg = mount<PlantGrid>(<PlantGrid {...props} />).instance();
pg.setState({ ...pg.state, status: "dirty" });
pg.componentWillUnmount();
expect(pg.props.dispatch).toHaveBeenCalledWith("SAVE_GRID_MOCK");
});
it("handles data changes", () => {
const props = fakeProps();
const pg = mount<PlantGrid>(<PlantGrid {...props} />).instance();
pg.onchange("numPlantsH", 6);
expect(pg.state.grid.numPlantsH).toEqual(6);
});
});