Skip to content

Commit 000bb4d

Browse files
committed
feat: add tests for eventMap to validate setting order and overrides
1 parent a633ce6 commit 000bb4d

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

ts/test/index.test.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import "reflect-metadata";
22
import { describe, expect, it } from "vitest";
33
import { Parameter } from "../src/decorators/function.dec";
44
import { EventSetting } from "../src/decorators/event.dec";
5+
import { Identifier } from "../src/decorators/meta.dec";
6+
import { eventMap } from "../src/map/event.map";
7+
import { runtimeEventMap } from "../src/map/runtime_event.map";
8+
import { Rest } from "../src/definitions/draco_rest/runtime_flow_types/rest";
59

610
describe("Parameter decorator", () => {
711
it("preserves source order across multiple decorators", () => {
@@ -27,6 +31,52 @@ describe("Parameter decorator", () => {
2731
});
2832
});
2933

34+
describe("eventMap", () => {
35+
const restSettingOrder = [
36+
"httpSchema",
37+
"httpURL",
38+
"httpMethod",
39+
"httpAuth",
40+
"httpAuthValue",
41+
"input_schema",
42+
];
43+
44+
it("keeps the runtime event's setting order regardless of override order", () => {
45+
@Identifier("ScrambledOverrides")
46+
@EventSetting({ identifier: "input_schema", hidden: true, defaultValue: {} })
47+
@EventSetting({ identifier: "httpAuthValue", hidden: true })
48+
@EventSetting({ identifier: "httpSchema", hidden: true, defaultValue: "application/json" })
49+
@EventSetting({ identifier: "httpMethod", hidden: true, defaultValue: "POST" })
50+
class ScrambledOverrides extends Rest {}
51+
52+
const def = eventMap(ScrambledOverrides);
53+
expect(def.settings?.map(s => s.identifier)).toEqual(restSettingOrder);
54+
});
55+
56+
it("merges override properties into the runtime event's setting", () => {
57+
@Identifier("MethodOverride")
58+
@EventSetting({ identifier: "httpMethod", hidden: true, defaultValue: "POST" })
59+
class MethodOverride extends Rest {}
60+
61+
const httpMethod = eventMap(MethodOverride).settings?.find(s => s.identifier === "httpMethod");
62+
expect(httpMethod?.hidden).toBe(true);
63+
expect(httpMethod?.defaultValue).toBe("POST");
64+
expect(httpMethod?.name).toEqual([{ code: "en-US", content: "Method" }]);
65+
});
66+
67+
it("does not pollute the runtime event's settings via subclass overrides", () => {
68+
@Identifier("PollutionCheck")
69+
@EventSetting({ identifier: "httpMethod", hidden: true, defaultValue: "POST" })
70+
class PollutionCheck extends Rest {}
71+
72+
eventMap(PollutionCheck);
73+
74+
const restSettings = runtimeEventMap(Rest).settings ?? [];
75+
expect(restSettings.map(s => s.identifier)).toEqual(restSettingOrder);
76+
expect(restSettings.find(s => s.identifier === "httpMethod")?.hidden).toBeUndefined();
77+
});
78+
});
79+
3080
describe("EventSetting decorator", () => {
3181
it("preserves source order across multiple decorators", () => {
3282
@EventSetting({ identifier: "first" })

0 commit comments

Comments
 (0)