Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
interface State {
client?: MqttClient;
error: Error | undefined;
stage: string;
}
const VIDEO_URL =
"https://cdn.shopify.com/s/files/1/2040/0289/files/Farm_Designer_Loop.mp4?9552037556691879018";
const PHONE_URL =
"https://cdn.shopify.com/s/files/1/2040/0289/files/Controls.png?9668345515035078097";
const WS_CONFIG = {
username: "farmbot_demo",
password: "required, but not used.",
};
const SECRET = uuid().split("-").join("");
const MQTT_CHAN = "demos/" + SECRET;
const HTTP_URL = "/api/demo_account";
const EASTER_EGG = "BIRDS AREN'T REAL";
export const WAITING_ON_API = "Planting your demo garden...";
// APPLICATION CODE ==============================
export class DemoIframe extends React.Component<{}, State> {
state: State = {
client: undefined,
error: undefined,
stage: "DEMO THE APP"
};
setError = (error?: Error) => this.setState({ error });
it("rejects malformed API data", () => {
const payload = {
uuid: "",
statusBeforeError: SpecialStatus.DIRTY,
dispatch: jest.fn(),
index: buildResourceIndex([fakePeripheral()]).index
};
payload.uuid = Object.keys(payload.index.all)[0];
console.error = jest.fn();
updateViaAjax(payload).catch(e => {
expect("" + e).toEqual("Error: Just saved a malformed TR.");
expect(console.error).toHaveBeenCalledTimes(1);
expect(console.error).toHaveBeenCalledWith(
expect.stringContaining("Peripheral"));
});
});
});
it("doesn't fire maybeClearForm() if form is filled", () => {
const { el, instance } = testCase();
el.setState({
status: SpecialStatus.DIRTY,
form: { ...instance().state.form, password: "X" }
});
el.update();
expect(instance().state.form.password).toEqual("X");
expect(instance().state.status).toBe(SpecialStatus.DIRTY);
instance().maybeClearForm();
expect(instance().state.status).toBe(SpecialStatus.DIRTY);
expect(instance().state.form.password).toEqual("X");
});
it("doesn't fire maybeClearForm() if form is filled", () => {
const { el, instance } = testCase();
el.setState({
status: SpecialStatus.DIRTY,
form: { ...instance().state.form, password: "X" }
});
el.update();
expect(instance().state.form.password).toEqual("X");
expect(instance().state.status).toBe(SpecialStatus.DIRTY);
instance().maybeClearForm();
expect(instance().state.status).toBe(SpecialStatus.DIRTY);
expect(instance().state.form.password).toEqual("X");
});
import { User } from "farmbot/dist/resources/api_resources";
import { TaggedUser, SpecialStatus } from "farmbot";
export const user: User = {
created_at: "2016-10-05T03:02:58.000Z",
email: "farmbot1@farmbot.io",
id: 2,
name: "FarmBot 1",
updated_at: "2017-08-04T19:53:29.724Z"
};
export const taggedUser: TaggedUser = {
kind: "User",
uuid: "1234-5678",
specialStatus: SpecialStatus.SAVED,
body: {
created_at: "2016-10-05T03:02:58.000Z",
email: "farmbot1@farmbot.io",
id: 2,
name: "FarmBot 1",
updated_at: "2017-08-04T19:53:29.724Z"
}
};
"device_id": 8,
"attachment_processed_at": "2017-06-01T14:16:45.899Z",
"updated_at": "2017-06-01T14:16:45.903Z",
"created_at": "2017-06-01T14:14:22.747Z",
"attachment_url": "imgur.com",
"meta": {
"x": 632,
"y": 347,
"z": 164
}
},
"uuid": "Image.8.4"
},
{
"kind": "Image",
"specialStatus": SpecialStatus.SAVED,
"body": {
"id": 7,
"device_id": 8,
"attachment_processed_at": "2017-06-01T14:16:34.839Z",
"updated_at": "2017-06-01T14:16:34.984Z",
"created_at": "2017-06-01T14:14:22.726Z",
"attachment_url": "imgur.com",
"meta": {
"x": 266,
"y": 330,
"z": 53
}
},
"uuid": "Image.7.5"
}
];
};
export function fakeDevice(body: Partial = {}):
TaggedDevice {
return {
"kind": "Device",
"specialStatus": SpecialStatus.SAVED,
"body": { ...DEFAULT_DEVICE_BODY, ...body },
"uuid": "Device.415.0"
};
}
const tr0: TaggedResource = {
"kind": "Sequence",
"specialStatus": SpecialStatus.SAVED,
"body": {
"id": 23,
"name": "Goto 0, 0, 0",
"color": "gray",
"folder_id": undefined,
"body": [
{
"kind": "move_absolute",
"args": {
"location": {
"kind": "coordinate",
"args": {
"x": 0,
"y": 0,
"z": 0
}
export function fakePinBinding(): TaggedPinBinding {
return fakeResource("PinBinding", {
id: idCounter++,
pin_num: 10,
sequence_id: idCounter++,
binding_type: PinBindingType.standard,
});
}
export function stepPut(value: Step,
ev: React.DragEvent,
intent: DataXferIntent,
draggerId: number):
ReduxAction {
let uuid = id();
console.log("dispatching step_put");
ev.dataTransfer.setData(STEP_DATATRANSFER_IDENTIFER, uuid);
return {
type: Actions.PUT_DATA_XFER,
payload: {
intent,
uuid,
value,
draggerId
}
};
}
[ToolPulloutDirection.NONE]:
{ label: t("None"), value: ToolPulloutDirection.NONE },
[ToolPulloutDirection.POSITIVE_X]:
{ label: t("Positive X"), value: ToolPulloutDirection.POSITIVE_X },
[ToolPulloutDirection.NEGATIVE_X]:
{ label: t("Negative X"), value: ToolPulloutDirection.NEGATIVE_X },
[ToolPulloutDirection.POSITIVE_Y]:
{ label: t("Positive Y"), value: ToolPulloutDirection.POSITIVE_Y },
[ToolPulloutDirection.NEGATIVE_Y]:
{ label: t("Negative Y"), value: ToolPulloutDirection.NEGATIVE_Y },
};
const DIRECTION_CHOICES: DropDownItem[] = [
DIRECTION_CHOICES_DDI[ToolPulloutDirection.NONE],
DIRECTION_CHOICES_DDI[ToolPulloutDirection.POSITIVE_X],
DIRECTION_CHOICES_DDI[ToolPulloutDirection.NEGATIVE_X],
DIRECTION_CHOICES_DDI[ToolPulloutDirection.POSITIVE_Y],
DIRECTION_CHOICES_DDI[ToolPulloutDirection.NEGATIVE_Y],
];
export interface SlotDirectionSelectProps {
dispatch: Function;
slot: TaggedToolSlotPointer;
}
export function SlotDirectionSelect(props: SlotDirectionSelectProps) {
const { dispatch, slot } = props;
const direction = slot.body.pullout_direction;
const changePulloutDirection = (selectedDirection: DropDownItem) => {
const { value } = selectedDirection;
dispatch(edit(slot, {