Tests for color / name setters.
parent
187b3bcbab
commit
b8196d5214
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue