Add widget lifecycle module
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
Copyright 2026 Element Creations Ltd.
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { constructWidgetPermissions, sortLongestMatchLast } from "../src/utils/constructWidgetPermissions";
|
||||
|
||||
describe("constructWidgetPermissions", () => {
|
||||
it("finds exact match", () => {
|
||||
expect(constructWidgetPermissions({ "https://a.com/": { preload_approved: true } }, "https://a.com/")).toEqual({
|
||||
preload_approved: true,
|
||||
});
|
||||
});
|
||||
|
||||
it("finds prefix match", () => {
|
||||
expect(
|
||||
constructWidgetPermissions({ "https://a.com/*": { preload_approved: true } }, "https://a.com/some"),
|
||||
).toEqual({ preload_approved: true });
|
||||
});
|
||||
|
||||
it("merges multiple permissions", () => {
|
||||
expect(
|
||||
constructWidgetPermissions(
|
||||
{
|
||||
"https://b.com/path": {
|
||||
preload_approved: false,
|
||||
capabilities_approved: ["org.matrix.msc2762.timeline:*"],
|
||||
},
|
||||
"https://b.com/*": {
|
||||
preload_approved: true,
|
||||
identity_approved: true,
|
||||
capabilities_approved: ["org.matrix.msc2931.navigate"],
|
||||
},
|
||||
},
|
||||
"https://b.com/path",
|
||||
),
|
||||
).toEqual({
|
||||
preload_approved: false,
|
||||
identity_approved: true,
|
||||
capabilities_approved: ["org.matrix.msc2762.timeline:*"],
|
||||
});
|
||||
});
|
||||
|
||||
it("skips unknown url", () => {
|
||||
expect(constructWidgetPermissions({ "https://a.com/": { preload_approved: true } }, "https://a.com/x")).toEqual(
|
||||
{},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("sortLongestMatchLast", () => {
|
||||
it("sorts longest match last", () => {
|
||||
expect(
|
||||
[
|
||||
"org.matrix.msc2762.receive.state_event:*",
|
||||
"org.matrix.msc2762.receive.*",
|
||||
"org.matrix.msc2762.receive.state_event:m.custom*",
|
||||
"org.matrix.msc2762.receive.state_event:m.custom#state_key",
|
||||
"org.matrix.msc2762.receive.state_event:m.custom#*",
|
||||
"*",
|
||||
].sort(sortLongestMatchLast),
|
||||
).toEqual([
|
||||
"*",
|
||||
"org.matrix.msc2762.receive.*",
|
||||
"org.matrix.msc2762.receive.state_event:*",
|
||||
"org.matrix.msc2762.receive.state_event:m.custom*",
|
||||
"org.matrix.msc2762.receive.state_event:m.custom#*",
|
||||
"org.matrix.msc2762.receive.state_event:m.custom#state_key",
|
||||
]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user