@@ -2,6 +2,10 @@ import "reflect-metadata";
22import { describe , expect , it } from "vitest" ;
33import { Parameter } from "../src/decorators/function.dec" ;
44import { 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
610describe ( "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+
3080describe ( "EventSetting decorator" , ( ) => {
3181 it ( "preserves source order across multiple decorators" , ( ) => {
3282 @EventSetting ( { identifier : "first" } )
0 commit comments