Tests for generateGrid

pull/1575/head
Rick Carlino 2019-11-18 14:20:46 -06:00
parent ad5b8cca37
commit 9c0bbc3f81
4 changed files with 61 additions and 44 deletions

View File

@ -1,4 +1,35 @@
import { vectorGrid } from "../generate_grid";
import { vectorGrid, initPlantGrid } from "../generate_grid";
const testGrid = { // Prime numbers yeah
startX: 11,
startY: 31,
spacingH: 5,
spacingV: 7,
numPlantsH: 2,
numPlantsV: 3
};
const expectedResultsOfTestGrid = [
[11, 31],
[11, 38],
[11, 45],
[16, 31],
[16, 38],
[16, 45]
];
describe("initPlantGrid", () => {
it("saves the grid", () => {
const result = initPlantGrid({
grid: testGrid,
openfarm_slug: "slug",
cropName: "beets",
gridId: "123"
});
expect(result.length).toEqual(expectedResultsOfTestGrid.length);
const vectors = result.map(x => [x.x, x.y]);
expect(vectors).toEqual(expectedResultsOfTestGrid);
});
});
describe("vectorGrid", () => {
it("handles zeros (edge case)", () => {
@ -14,24 +45,9 @@ describe("vectorGrid", () => {
});
it("generates a grid", () => {
const p = { // Prime numbers yeah
startX: 11,
startY: 31,
spacingH: 5,
spacingV: 7,
numPlantsH: 2,
numPlantsV: 3
};
const results = vectorGrid(p);
expect(results.length).toEqual(p.numPlantsH * p.numPlantsV);
const expected = JSON.stringify([
[11, 31],
[11, 38],
[11, 45],
[16, 31],
[16, 38],
[16, 45]
]);
const results = vectorGrid(testGrid);
expect(results.length).toEqual(testGrid.numPlantsH * testGrid.numPlantsV);
const expected = JSON.stringify(expectedResultsOfTestGrid);
expect(JSON.stringify(results)).toEqual(expected);
});
});

View File

@ -1,6 +1,13 @@
import { PlantGridData } from "./constants";
import { range } from "lodash";
import { PlantPointer } from "farmbot/dist/resources/api_resources";
import { range } from "lodash";
import { PlantGridData } from "./constants";
interface PlantGridInitOption {
grid: PlantGridData;
openfarm_slug: string;
cropName: string;
gridId: string;
}
export function vectorGrid(params: PlantGridData): [number, number][] {
const rows = range(params.startX,
@ -18,30 +25,24 @@ export function vectorGrid(params: PlantGridData): [number, number][] {
return results;
}
const createPlant = (openfarm_slug: string, name: string, gridId: string) =>
(vec: [number, number]): PlantPointer => {
const [x, y] = vec;
return {
name: name,
radius: 25,
z: 0,
x,
y,
openfarm_slug,
pointer_type: "Plant",
plant_stage: "planted",
meta: { gridId }
const createPlantGridMapper =
(openfarm_slug: string, name: string, gridId: string) =>
(vec: [number, number]): PlantPointer => {
const [x, y] = vec;
return {
name,
radius: 25,
z: 0,
x,
y,
openfarm_slug,
pointer_type: "Plant",
plant_stage: "planted",
meta: { gridId }
};
};
};
interface PlantGridInitOption {
grid: PlantGridData;
openfarm_slug: string;
cropName: string;
gridId: string;
}
export const initPlantGrid = (p: PlantGridInitOption): PlantPointer[] => {
const mapper = createPlant(p.openfarm_slug, p.cropName, p.gridId);
const mapper = createPlantGridMapper(p.openfarm_slug, p.cropName, p.gridId);
return vectorGrid(p.grid).map(mapper);
};

View File

@ -11,7 +11,7 @@ import { uuid } from "farmbot";
import { saveGrid, stashGrid } from "./thunks";
import { error } from "../../../toast/toast";
import { t } from "../../../i18next_wrapper";
import { GridInput } from "./grid_inputs";
import { GridInput } from "./grid_input";
export class PlantGrid extends React.Component<PlantGridProps, PlantGridState> {
state: PlantGridState = { ...EMPTY_PLANT_GRID, gridId: uuid() };