The Files browser gets tabs instead of a Home screen, also in the Open, Save and Move dialogs; All (the whole workflows folder) is for admins. Per-workflow access lists are removed: a live workflow's access is its folder's, and This tab offers Folder access to the folder's owner.
52 lines
2.4 KiB
JavaScript
52 lines
2.4 KiB
JavaScript
// Files browser tabs: My files, Shared, and All for admins.
|
|
import { test } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
// Just enough DOM for the browser to build its elements.
|
|
class FakeNode {
|
|
constructor(tag) { this.tag = tag; this.children = []; this.style = {}; this.attrs = {}; this.className = ""; }
|
|
append(...c) { this.children.push(...c); }
|
|
replaceChildren(...c) { this.children = c; }
|
|
addEventListener() {}
|
|
setAttribute(k, v) { this.attrs[k] = v; }
|
|
querySelector() { return new FakeNode("div"); }
|
|
get isConnected() { return false; }
|
|
}
|
|
globalThis.Node ??= FakeNode;
|
|
globalThis.document ??= { createElement: (t) => new FakeNode(t), createTextNode: (t) => Object.assign(new FakeNode("#text"), { text: t }) };
|
|
const { FilesBrowser } = await import("../../web/rigshare/files.js");
|
|
|
|
const browser = (admin, start) => new FilesBrowser({
|
|
app: {}, sync: {}, mode: "open", start,
|
|
client: { self: { key: "bob" }, perms: { admin }, users: [], rooms: [], on() {}, emit() {} },
|
|
});
|
|
|
|
test("tabs: My files and Shared for everyone, All for admins", () => {
|
|
assert.deepEqual(browser(false).tabs.map((t) => t.label), ["My files", "Shared"]);
|
|
assert.deepEqual(browser(true).tabs.map((t) => t.label), ["My files", "Shared", "All"]);
|
|
});
|
|
|
|
test("starts in My files and picks the tab a folder belongs to", () => {
|
|
const b = browser(false);
|
|
assert.equal(b.tab, "mine");
|
|
assert.equal(b.path, "users/bob");
|
|
assert.equal(browser(false, "shared/Team").tab, "shared");
|
|
assert.equal(browser(false, "renders").tab, "shared");
|
|
assert.equal(browser(true, "users/alice").tab, "all");
|
|
assert.equal(browser(true, "").tab, "all");
|
|
});
|
|
|
|
test("people without All never start outside their tabs", () => {
|
|
for (const start of ["", "users", "users/alice/x"]) {
|
|
const b = browser(false, start);
|
|
assert.ok(["users/bob", "@shared"].includes(b.path), `${start} -> ${b.path}`);
|
|
}
|
|
});
|
|
|
|
test("breadcrumbs start at the tab", () => {
|
|
assert.deepEqual(browser(false, "users/bob/renders/old").trail().map((c) => c.label), ["My files", "renders", "old"]);
|
|
assert.deepEqual(browser(false, "shared/Team/sub").trail().map((c) => c.label), ["Shared", "Team", "sub"]);
|
|
assert.deepEqual(browser(true, "users/alice").trail().map((c) => c.label), ["All", "users", "alice"]);
|
|
assert.equal(browser(false, "shared/Team").label, "Shared / Team");
|
|
});
|