Tests for color / name setters.

folders
Rick Carlino 2019-11-27 11:24:17 -06:00
parent 187b3bcbab
commit b8196d5214
2 changed files with 53 additions and 5 deletions

View File

@ -1,8 +1,16 @@
import { FolderNode } from "../constants";
import { ingest } from "../data_transfer";
import { findFolder, toggleFolderOpenState, expandAll, collapseAll } from "../actions";
import {
collapseAll,
expandAll,
findFolder,
setFolderColor,
setFolderName,
toggleFolderOpenState,
} from "../actions";
import { times, sample } from "lodash";
import { cloneAndClimb, climb } from "../climb";
// Folder structure used in tests:
// ├─ One
// ├─ Two
@ -44,6 +52,29 @@ const FOLDERS: FolderNode[] = [
];
const GRAPH = ingest(FOLDERS);
const randomNode = () => {
const node = sample(FOLDERS);
if (!node) {
throw new Error("Never");
}
return node;
};
describe("setting of color, name", () => {
it("sets the color", async () => {
const node = randomNode();
const nextFolder = await setFolderColor(GRAPH, node.id, "green");
expect(findFolder(nextFolder, node.id)?.color).toEqual("green");
});
it("sets the name of a folder", async () => {
const node = randomNode();
const nextFolder = await setFolderName(GRAPH, node.id, "blah");
expect(findFolder(nextFolder, node.id)?.name).toEqual("blah");
});
});
describe("expand/collapse all", () => {
const halfOpen = cloneAndClimb(GRAPH, (node) => {
node.open = !sample([true, false]);
@ -67,7 +98,7 @@ describe("expand/collapse all", () => {
describe("toggleFolderOpenState", () => {
it("toggles the `open` value of a folder", () => {
times(3, async () => {
const node = sample(FOLDERS);
const node = randomNode();
if (!node) {
throw new Error("Impossible");
}

View File

@ -3,6 +3,7 @@ import {
FolderUnion
} from "./constants";
import { cloneAndClimb } from "./climb";
import { Color } from "farmbot";
export const findFolder = (tree: Tree, id: number) => {
let result: FolderUnion | undefined;
@ -36,9 +37,25 @@ export const collapseAll = (tree: Tree) => {
}));
};
export const setFolderColor = (_: Tree, _id: number) => Promise.reject("WIP");
export const setFolderName =
(_: Tree, _id: number, _name: string) => Promise.reject("WIP");
export const setFolderColor = (tree: Tree, id: number, color: Color) => {
// In the real version, I will probably just do
// an HTTP POST and re-draw the graph at response
// time.
return Promise.resolve(cloneAndClimb(tree, (node) => {
if (node.id == id) {
node.color = color;
}
}));
};
export const setFolderName = (tree: Tree, id: number, name: string) => {
return Promise.resolve(cloneAndClimb(tree, (node) => {
if (node.id == id) {
node.name = name;
}
}));
};
export const createFolder = (_: Tree) => Promise.reject("WIP");
export const deleteFolder = (_: Tree) => Promise.reject("WIP");
export const moveFolderItem = (_: Tree) => Promise.reject("WIP");