





























@@ -26,6 +26,15 @@ function pluginIds(plugins: ReturnType<typeof listReadOnlyChannelPluginsForConfi
2626return plugins.map((entry) => entry.id);
2727}
282829+function expectRecordFields(record: unknown, expected: Record<string, unknown>) {
30+expect(record).toBeDefined();
31+const actual = record as Record<string, unknown>;
32+for (const [key, value] of Object.entries(expected)) {
33+expect(actual[key]).toEqual(value);
34+}
35+return actual;
36+}
37+2938vi.mock("../../plugins/bundled-dir.js", async (importOriginal) => {
3039const actual = await importOriginal<typeof import("../../plugins/bundled-dir.js")>();
3140return {
@@ -584,8 +593,8 @@ describe("listReadOnlyChannelPluginsForConfig", () => {
584593"alpha-chat": { token: "alpha-token" },
585594"beta-chat": { token: "beta-token" },
586595},
587-} as never),
588-).toMatchObject({ token: "beta-token" });
596+} as never).token,
597+).toBe("beta-token");
589598expect(fs.existsSync(setupMarker)).toBe(true);
590599expect(fs.existsSync(fullMarker)).toBe(false);
591600});
@@ -627,8 +636,8 @@ describe("listReadOnlyChannelPluginsForConfig", () => {
627636channels: {
628637"beta-chat": { token: "beta-token" },
629638},
630-} as never),
631-).toMatchObject({ token: "beta-token" });
639+} as never).token,
640+).toBe("beta-token");
632641expect(fs.existsSync(setupMarker)).toBe(true);
633642expect(fs.existsSync(fullMarker)).toBe(false);
634643});
@@ -718,26 +727,24 @@ describe("listReadOnlyChannelPluginsForConfig", () => {
718727expect(plugin?.meta.label).toBe("External Chat Manifest");
719728expect(plugin?.meta.blurb).toBe("manifest config");
720729expect(plugin?.meta.preferOver).toEqual(["legacy-external-chat"]);
721-expect(plugin?.configSchema?.schema).toMatchObject({
722-properties: {
723-token: { type: "string" },
724-},
725-});
726-expect(plugin?.configSchema?.uiHints?.token).toMatchObject({
730+const schema = plugin?.configSchema?.schema as
731+| { properties?: Record<string, { type?: string }> }
732+| undefined;
733+expect(schema?.properties?.token?.type).toBe("string");
734+expectRecordFields(plugin?.configSchema?.uiHints?.token, {
727735label: "Token",
728736sensitive: true,
729737});
730738expect(
731739plugin?.config.listAccountIds({ channels: { "external-chat": { token: "t" } } } as never),
732740).toEqual(["default"]);
733-expect(
734-plugin?.config.resolveAccount({
735-channels: { "external-chat": { token: "configured" } },
736-} as never),
737-).toMatchObject({
741+const account = plugin?.config.resolveAccount({
742+channels: { "external-chat": { token: "configured" } },
743+} as never);
744+const accountFields = expectRecordFields(account, {
738745accountId: "default",
739-config: { token: "configured" },
740746});
747+expectRecordFields(accountFields.config, { token: "configured" });
741748expect(fs.existsSync(setupMarker)).toBe(false);
742749expect(fs.existsSync(fullMarker)).toBe(false);
743750});
@@ -830,13 +837,15 @@ describe("listReadOnlyChannelPluginsForConfig", () => {
830837}).find((entry) => entry.id === "external-chat");
831838832839expect(plugin?.config.listAccountIds(cfg)).toEqual(["default", "named"]);
833-expect(plugin?.config.resolveAccount(cfg, "__proto__")).toMatchObject({
840+const defaultAccount = plugin?.config.resolveAccount(cfg, "__proto__");
841+const defaultFields = expectRecordFields(defaultAccount, {
834842accountId: "default",
835-config: { token: "default-token" },
836-});
837-expect(plugin?.config.resolveAccount(cfg, "inherited")).not.toMatchObject({
838-config: { token: "prototype-token" },
839843});
844+expectRecordFields(defaultFields.config, { token: "default-token" });
845+const inheritedAccount = plugin?.config.resolveAccount(cfg, "inherited") as
846+| { config?: { token?: string } }
847+| undefined;
848+expect(inheritedAccount?.config?.token).not.toBe("prototype-token");
840849});
841850842851it("keeps setup-entry precedence when channel config descriptors are not runtime cutoffs", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。