147 lines
5.3 KiB
TypeScript
147 lines
5.3 KiB
TypeScript
import { mapStateToProps, getPlants } from "../state_to_props";
|
|
import { fakeState } from "../../__test_support__/fake_state";
|
|
import {
|
|
buildResourceIndex, fakeDevice
|
|
} from "../../__test_support__/resource_index_builder";
|
|
import {
|
|
fakePlant,
|
|
fakePlantTemplate,
|
|
fakeSavedGarden,
|
|
fakePoint,
|
|
fakeWebAppConfig,
|
|
fakeFarmwareEnv,
|
|
fakeSensorReading
|
|
} from "../../__test_support__/fake_state/resources";
|
|
import { WebAppConfig } from "farmbot/dist/resources/configs/web_app";
|
|
import { generateUuid } from "../../resources/util";
|
|
import { DevSettings } from "../../account/dev/dev_support";
|
|
|
|
describe("mapStateToProps()", () => {
|
|
const DISCARDED_AT = "2018-01-01T00:00:00.000Z";
|
|
|
|
it("hovered plantUUID is undefined", () => {
|
|
const state = fakeState();
|
|
state.resources.consumers.farm_designer.hoveredPlant = {
|
|
plantUUID: "x", icon: ""
|
|
};
|
|
expect(mapStateToProps(state).hoveredPlant).toBeFalsy();
|
|
});
|
|
|
|
it("peripherals pins have correct states", () => {
|
|
const state = fakeState();
|
|
function checkValue(input: number, value: boolean) {
|
|
state.bot.hardware.pins = { 13: { value: input, mode: 0 } };
|
|
const peripheralPin = mapStateToProps(state).peripherals[0];
|
|
expect(peripheralPin.value).toEqual(value);
|
|
}
|
|
checkValue(0, false);
|
|
checkValue(-1, false);
|
|
checkValue(1, true);
|
|
checkValue(2, true);
|
|
});
|
|
|
|
it("stepsPerMm is defined", () => {
|
|
const state = fakeState();
|
|
state.bot.hardware.mcu_params.movement_step_per_mm_x = 3;
|
|
state.bot.hardware.mcu_params.movement_step_per_mm_y = 4;
|
|
expect(mapStateToProps(state).stepsPerMmXY).toEqual({ x: 3, y: 4 });
|
|
});
|
|
|
|
it("returns selected plant", () => {
|
|
const state = fakeState();
|
|
state.resources = buildResourceIndex([fakePlant(), fakeDevice()]);
|
|
const plantUuid = Object.keys(state.resources.index.byKind["Point"])[0];
|
|
state.resources.consumers.farm_designer.selectedPlants = [plantUuid];
|
|
expect(mapStateToProps(state).selectedPlant).toEqual(
|
|
expect.objectContaining({ uuid: plantUuid }));
|
|
});
|
|
|
|
it("returns all genericPoints", () => {
|
|
const state = fakeState();
|
|
const webAppConfig = fakeWebAppConfig();
|
|
(webAppConfig.body as WebAppConfig).show_historic_points = true;
|
|
const point1 = fakePoint();
|
|
point1.body.discarded_at = undefined;
|
|
const point2 = fakePoint();
|
|
point2.body.discarded_at = DISCARDED_AT;
|
|
const point3 = fakePoint();
|
|
point3.body.discarded_at = DISCARDED_AT;
|
|
state.resources = buildResourceIndex([
|
|
webAppConfig, point1, point2, point3, fakeDevice()
|
|
]);
|
|
expect(mapStateToProps(state).genericPoints.length).toEqual(3);
|
|
});
|
|
|
|
it("returns active genericPoints", () => {
|
|
const state = fakeState();
|
|
const webAppConfig = fakeWebAppConfig();
|
|
(webAppConfig.body as WebAppConfig).show_historic_points = false;
|
|
const point1 = fakePoint();
|
|
point1.body.discarded_at = undefined;
|
|
const point2 = fakePoint();
|
|
point2.body.discarded_at = DISCARDED_AT;
|
|
const point3 = fakePoint();
|
|
point3.body.discarded_at = DISCARDED_AT;
|
|
state.resources = buildResourceIndex([
|
|
webAppConfig, point1, point2, point3, fakeDevice()
|
|
]);
|
|
expect(mapStateToProps(state).genericPoints.length).toEqual(1);
|
|
});
|
|
|
|
it("returns sensor readings", () => {
|
|
const state = fakeState();
|
|
const sr1 = fakeSensorReading();
|
|
sr1.body.created_at = "2018-01-14T20:20:38.362Z";
|
|
const sr2 = fakeSensorReading();
|
|
sr2.body.created_at = "2018-01-11T20:20:38.362Z";
|
|
state.resources = buildResourceIndex([sr1, sr2, fakeDevice()]);
|
|
const uuid1 = Object.keys(state.resources.index.byKind["SensorReading"])[0];
|
|
const uuid2 = Object.keys(state.resources.index.byKind["SensorReading"])[1];
|
|
expect(mapStateToProps(state).sensorReadings).toEqual([
|
|
expect.objectContaining({ uuid: uuid2 }),
|
|
expect.objectContaining({ uuid: uuid1 }),
|
|
]);
|
|
});
|
|
});
|
|
|
|
describe("getPlants()", () => {
|
|
const fakeResources = () => {
|
|
const savedGarden = fakeSavedGarden();
|
|
savedGarden.uuid = generateUuid(1, "SavedGarden");
|
|
savedGarden.body.id = 1;
|
|
const plant1 = fakePlant();
|
|
const plant2 = fakePlant();
|
|
const template1 = fakePlantTemplate();
|
|
template1.body.saved_garden_id = 1;
|
|
const template2 = fakePlantTemplate();
|
|
template2.body.saved_garden_id = 2;
|
|
return buildResourceIndex([
|
|
savedGarden, plant1, plant2, template1, template2, fakeDevice()
|
|
]);
|
|
};
|
|
it("returns plants", () => {
|
|
expect(getPlants(fakeResources()).length).toEqual(2);
|
|
});
|
|
|
|
it("returns plant templates", () => {
|
|
const resources = fakeResources();
|
|
const savedGardenUuid = Object.keys(resources.index.byKind["SavedGarden"])[0];
|
|
resources.consumers.farm_designer.openedSavedGarden = savedGardenUuid;
|
|
expect(getPlants(resources).length).toEqual(1);
|
|
});
|
|
|
|
it("returns API farmware env", () => {
|
|
const state = fakeState();
|
|
state.bot.hardware.user_env = {};
|
|
state.bot.hardware.informational_settings.controller_version =
|
|
DevSettings.MAX_FBOS_VERSION_OVERRIDE;
|
|
const fwEnv = fakeFarmwareEnv();
|
|
fwEnv.body.key = "CAMERA_CALIBRATION_total_rotation_angle";
|
|
fwEnv.body.value = 15;
|
|
state.resources = buildResourceIndex([fwEnv, fakeDevice()]);
|
|
const props = mapStateToProps(state);
|
|
expect(props.cameraCalibrationData).toEqual(
|
|
expect.objectContaining({ rotation: "15" }));
|
|
});
|
|
});
|