diff --git a/src/app/service/service_worker/client.ts b/src/app/service/service_worker/client.ts index 8e874ce95..f11293570 100644 --- a/src/app/service/service_worker/client.ts +++ b/src/app/service/service_worker/client.ts @@ -118,7 +118,8 @@ export class ScriptClient extends Client { return this.do("setCheckUpdateUrl", { uuid, checkUpdate, checkUpdateUrl }); } - updateMetadata(uuid: string, key: string, value: string[]) { + // value 为 undefined 表示撤销用户覆盖,生效值回落脚本自带 metadata + updateMetadata(uuid: string, key: string, value: string[] | undefined) { return this.do("updateMetadata", { uuid, key, value }); } async getBatchUpdateRecordLite(i: number) { diff --git a/src/app/service/service_worker/script.test.ts b/src/app/service/service_worker/script.test.ts new file mode 100644 index 000000000..a69116b17 --- /dev/null +++ b/src/app/service/service_worker/script.test.ts @@ -0,0 +1,163 @@ +import { initTestEnv } from "@Tests/utils"; +import { ScriptService } from "./script"; +import { vi, describe, it, expect, beforeEach } from "vitest"; +import { randomUUID } from "crypto"; +import type { Script, ScriptDAO } from "@App/app/repo/scripts"; +import { SCRIPT_STATUS_ENABLE, SCRIPT_TYPE_NORMAL } from "@App/app/repo/scripts"; +import type { Group } from "@Packages/message/server"; +import { Server } from "@Packages/message/server"; +import type { IMessageQueue } from "@Packages/message/message_queue"; +import { MessageQueue } from "@Packages/message/message_queue"; +import { MockMessage } from "@Packages/message/mock_message"; +import EventEmitter from "eventemitter3"; +import type { SystemConfig } from "@App/pkg/config/config"; +import type { ValueService } from "./value"; +import type { ResourceService } from "./resource"; + +initTestEnv(); + +/** + * selfMetadata 是「用户对脚本自带 @metadata 的覆盖」。 + * undefined 表示撤销覆盖(生效值回落脚本自带 metadata),空数组表示用户显式清空,两者语义不同。 + */ +describe("ScriptService selfMetadata 用户覆盖", () => { + let scriptService: ScriptService; + let mockScriptDAO: ScriptDAO; + let mockGroup: Group; + let mockMessageQueue: IMessageQueue; + + const createMockScript = (overrides: Partial