mirror of
https://github.com/zadam/trilium.git
synced 2026-03-03 02:53:37 +01:00
152 lines
5.2 KiB
TypeScript
152 lines
5.2 KiB
TypeScript
import { NoteType } from "@triliumnext/commons";
|
|
import { beforeAll, describe, expect, it, vi } from "vitest";
|
|
|
|
import NoteContext from "../../components/note_context";
|
|
import { ViewMode } from "../../services/link";
|
|
import { randomString } from "../../services/utils";
|
|
import { buildNote } from "../../test/easy-froca";
|
|
import { getFormattingToolbarState } from "./FormattingToolbar";
|
|
|
|
interface NoteContextInfo {
|
|
type: NoteType;
|
|
viewScope?: ViewMode;
|
|
isReadOnly?: boolean;
|
|
}
|
|
|
|
describe("Formatting toolbar logic", () => {
|
|
beforeAll(() => {
|
|
vi.mock("../../services/tree.ts", () => ({
|
|
default: {
|
|
getActiveContextNotePath() {
|
|
return "root";
|
|
},
|
|
resolveNotePath(inputNotePath: string) {
|
|
return inputNotePath;
|
|
},
|
|
getNoteIdFromUrl(url) {
|
|
return url.split("/").at(-1);
|
|
}
|
|
}
|
|
}));
|
|
|
|
buildNote({
|
|
id: "root",
|
|
title: "Root"
|
|
});
|
|
});
|
|
|
|
async function buildConfig(noteContextInfos: NoteContextInfo[], activeIndex: number = 0) {
|
|
const noteContexts: NoteContext[] = [];
|
|
for (const noteContextData of noteContextInfos) {
|
|
const noteContext = new NoteContext(randomString(10));
|
|
const note = buildNote({
|
|
title: randomString(5),
|
|
type: noteContextData.type
|
|
});
|
|
|
|
noteContext.noteId = note.noteId;
|
|
expect(noteContext.note).toBe(note);
|
|
noteContext.viewScope = {
|
|
viewMode: noteContextData.viewScope ?? "default"
|
|
};
|
|
noteContext.isReadOnly = async () => !!noteContextData.isReadOnly;
|
|
noteContext.getSubContexts = () => [];
|
|
noteContexts.push(noteContext);
|
|
};
|
|
|
|
const mainNoteContext = noteContexts[0];
|
|
for (const noteContext of noteContexts) {
|
|
noteContext.getMainContext = () => mainNoteContext;
|
|
}
|
|
|
|
mainNoteContext.getSubContexts = () => noteContexts;
|
|
return noteContexts[activeIndex];
|
|
}
|
|
|
|
async function testSplit(noteContextInfos: NoteContextInfo[], activeIndex: number = 0, editor = "ckeditor-classic") {
|
|
const noteContext = await buildConfig(noteContextInfos, activeIndex);
|
|
return await getFormattingToolbarState(noteContext, noteContext.note, editor);
|
|
}
|
|
|
|
describe("Single split", () => {
|
|
it("should be hidden for floating toolbar", async () => {
|
|
expect(await testSplit([ { type: "text" } ], 0, "ckeditor-balloon")).toBe("hidden");
|
|
});
|
|
|
|
it("should be visible for single text note", async () => {
|
|
expect(await testSplit([ { type: "text" } ])).toBe("visible");
|
|
});
|
|
|
|
it("should be hidden for read-only text note", async () => {
|
|
expect(await testSplit([ { type: "text", isReadOnly: true } ])).toBe("hidden");
|
|
});
|
|
|
|
it("should be hidden for non-text note", async () => {
|
|
expect(await testSplit([ { type: "code" } ])).toBe("hidden");
|
|
});
|
|
|
|
it("should be hidden for wrong view mode", async () => {
|
|
expect(await testSplit([ { type: "text", viewScope: "attachments" } ])).toBe("hidden");
|
|
});
|
|
});
|
|
|
|
describe("Multi split", () => {
|
|
it("should be hidden for floating toolbar", async () => {
|
|
expect(await testSplit([
|
|
{ type: "text" },
|
|
{ type: "text" },
|
|
], 0, "ckeditor-balloon")).toBe("hidden");
|
|
});
|
|
|
|
it("should be visible for two text notes", async () => {
|
|
expect(await testSplit([
|
|
{ type: "text" },
|
|
{ type: "text" },
|
|
])).toBe("visible");
|
|
});
|
|
|
|
it("should be disabled if on a non-text note", async () => {
|
|
expect(await testSplit([
|
|
{ type: "text" },
|
|
{ type: "code" },
|
|
], 1)).toBe("disabled");
|
|
});
|
|
|
|
it("should be hidden for all non-text notes", async () => {
|
|
expect(await testSplit([
|
|
{ type: "code" },
|
|
{ type: "canvas" },
|
|
])).toBe("hidden");
|
|
});
|
|
|
|
it("should be hidden for all read-only text notes", async () => {
|
|
expect(await testSplit([
|
|
{ type: "text", isReadOnly: true },
|
|
{ type: "text", isReadOnly: true },
|
|
])).toBe("hidden");
|
|
});
|
|
|
|
it("should be visible for mixed view mode", async () => {
|
|
expect(await testSplit([
|
|
{ type: "text" },
|
|
{ type: "text", viewScope: "attachments" }
|
|
])).toBe("visible");
|
|
});
|
|
|
|
it("should be hidden for all wrong view mode", async () => {
|
|
expect(await testSplit([
|
|
{ type: "text", viewScope: "attachments" },
|
|
{ type: "text", viewScope: "attachments" }
|
|
])).toBe("hidden");
|
|
});
|
|
|
|
it("should be disabled for wrong view mode", async () => {
|
|
expect(await testSplit([
|
|
{ type: "text" },
|
|
{ type: "text", viewScope: "attachments" }
|
|
], 1)).toBe("disabled");
|
|
});
|
|
});
|
|
|
|
});
|