Tests for generateGrid
parent
ad5b8cca37
commit
9c0bbc3f81
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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() };
|
||||
|
|
Loading…
Reference in New Issue