@@ -4,85 +4,97 @@ import type { IMetadataService } from './metadata-service';
44describe ( 'Metadata Service Contract' , ( ) => {
55 it ( 'should allow a minimal IMetadataService implementation with required methods' , ( ) => {
66 const service : IMetadataService = {
7- register : ( _type , _definition ) => { } ,
8- get : ( _type , _name ) => undefined ,
9- list : ( _type ) => [ ] ,
10- unregister : ( _type , _name ) => { } ,
11- getObject : ( _name ) => undefined ,
12- listObjects : ( ) => [ ] ,
7+ register : async ( _type , _name , _data ) => { } ,
8+ get : async ( _type , _name ) => undefined ,
9+ list : async ( _type ) => [ ] ,
10+ unregister : async ( _type , _name ) => { } ,
11+ exists : async ( _type , _name ) => false ,
12+ listNames : async ( _type ) => [ ] ,
13+ getObject : async ( _name ) => undefined ,
14+ listObjects : async ( ) => [ ] ,
1315 } ;
1416
1517 expect ( typeof service . register ) . toBe ( 'function' ) ;
1618 expect ( typeof service . get ) . toBe ( 'function' ) ;
1719 expect ( typeof service . list ) . toBe ( 'function' ) ;
1820 expect ( typeof service . unregister ) . toBe ( 'function' ) ;
21+ expect ( typeof service . exists ) . toBe ( 'function' ) ;
22+ expect ( typeof service . listNames ) . toBe ( 'function' ) ;
1923 expect ( typeof service . getObject ) . toBe ( 'function' ) ;
2024 expect ( typeof service . listObjects ) . toBe ( 'function' ) ;
2125 } ) ;
2226
2327 it ( 'should allow a full implementation with optional methods' , ( ) => {
2428 const service : IMetadataService = {
25- register : ( ) => { } ,
26- get : ( ) => undefined ,
27- list : ( ) => [ ] ,
28- unregister : ( ) => { } ,
29- getObject : ( ) => undefined ,
30- listObjects : ( ) => [ ] ,
31- unregisterPackage : ( _packageName ) => { } ,
29+ register : async ( ) => { } ,
30+ get : async ( ) => undefined ,
31+ list : async ( ) => [ ] ,
32+ unregister : async ( ) => { } ,
33+ exists : async ( ) => false ,
34+ listNames : async ( ) => [ ] ,
35+ getObject : async ( ) => undefined ,
36+ listObjects : async ( ) => [ ] ,
37+ unregisterPackage : async ( _packageName ) => { } ,
3238 } ;
3339
3440 expect ( service . unregisterPackage ) . toBeDefined ( ) ;
3541 } ) ;
3642
37- it ( 'should register and retrieve metadata items' , ( ) => {
43+ it ( 'should register and retrieve metadata items asynchronously' , async ( ) => {
3844 const store = new Map < string , Map < string , unknown > > ( ) ;
3945
4046 const service : IMetadataService = {
41- register : ( type , definition ) => {
47+ register : async ( type , name , data ) => {
4248 if ( ! store . has ( type ) ) store . set ( type , new Map ( ) ) ;
43- const def = definition as { name : string } ;
44- store . get ( type ) ! . set ( def . name , definition ) ;
49+ store . get ( type ) ! . set ( name , data ) ;
4550 } ,
46- get : ( type , name ) => store . get ( type ) ?. get ( name ) ,
47- list : ( type ) => Array . from ( store . get ( type ) ?. values ( ) ?? [ ] ) ,
48- unregister : ( type , name ) => { store . get ( type ) ?. delete ( name ) ; } ,
49- getObject : ( name ) => store . get ( 'object' ) ?. get ( name ) ,
50- listObjects : ( ) => Array . from ( store . get ( 'object' ) ?. values ( ) ?? [ ] ) ,
51+ get : async ( type , name ) => store . get ( type ) ?. get ( name ) ,
52+ list : async ( type ) => Array . from ( store . get ( type ) ?. values ( ) ?? [ ] ) ,
53+ unregister : async ( type , name ) => { store . get ( type ) ?. delete ( name ) ; } ,
54+ exists : async ( type , name ) => store . get ( type ) ?. has ( name ) ?? false ,
55+ listNames : async ( type ) => Array . from ( store . get ( type ) ?. keys ( ) ?? [ ] ) ,
56+ getObject : async ( name ) => store . get ( 'object' ) ?. get ( name ) ,
57+ listObjects : async ( ) => Array . from ( store . get ( 'object' ) ?. values ( ) ?? [ ] ) ,
5158 } ;
5259
5360 const objectDef = { name : 'account' , label : 'Account' , fields : { } } ;
54- service . register ( 'object' , objectDef ) ;
61+ await service . register ( 'object' , 'account ', objectDef ) ;
5562
56- expect ( service . get ( 'object' , 'account' ) ) . toEqual ( objectDef ) ;
57- expect ( service . getObject ( 'account' ) ) . toEqual ( objectDef ) ;
58- expect ( service . listObjects ( ) ) . toHaveLength ( 1 ) ;
63+ expect ( await service . get ( 'object' , 'account' ) ) . toEqual ( objectDef ) ;
64+ expect ( await service . getObject ( 'account' ) ) . toEqual ( objectDef ) ;
65+ expect ( await service . listObjects ( ) ) . toHaveLength ( 1 ) ;
66+ expect ( await service . exists ( 'object' , 'account' ) ) . toBe ( true ) ;
67+ expect ( await service . listNames ( 'object' ) ) . toEqual ( [ 'account' ] ) ;
5968
60- service . unregister ( 'object' , 'account' ) ;
61- expect ( service . get ( 'object' , 'account' ) ) . toBeUndefined ( ) ;
69+ await service . unregister ( 'object' , 'account' ) ;
70+ expect ( await service . get ( 'object' , 'account' ) ) . toBeUndefined ( ) ;
71+ expect ( await service . exists ( 'object' , 'account' ) ) . toBe ( false ) ;
6272 } ) ;
6373
64- it ( 'should list items by type' , ( ) => {
74+ it ( 'should list items by type' , async ( ) => {
6575 const store = new Map < string , Map < string , unknown > > ( ) ;
6676
6777 const service : IMetadataService = {
68- register : ( type , definition ) => {
78+ register : async ( type , name , data ) => {
6979 if ( ! store . has ( type ) ) store . set ( type , new Map ( ) ) ;
70- const def = definition as { name : string } ;
71- store . get ( type ) ! . set ( def . name , definition ) ;
80+ store . get ( type ) ! . set ( name , data ) ;
7281 } ,
73- get : ( type , name ) => store . get ( type ) ?. get ( name ) ,
74- list : ( type ) => Array . from ( store . get ( type ) ?. values ( ) ?? [ ] ) ,
75- unregister : ( type , name ) => { store . get ( type ) ?. delete ( name ) ; } ,
76- getObject : ( name ) => store . get ( 'object' ) ?. get ( name ) ,
77- listObjects : ( ) => Array . from ( store . get ( 'object' ) ?. values ( ) ?? [ ] ) ,
82+ get : async ( type , name ) => store . get ( type ) ?. get ( name ) ,
83+ list : async ( type ) => Array . from ( store . get ( type ) ?. values ( ) ?? [ ] ) ,
84+ unregister : async ( type , name ) => { store . get ( type ) ?. delete ( name ) ; } ,
85+ exists : async ( type , name ) => store . get ( type ) ?. has ( name ) ?? false ,
86+ listNames : async ( type ) => Array . from ( store . get ( type ) ?. keys ( ) ?? [ ] ) ,
87+ getObject : async ( name ) => store . get ( 'object' ) ?. get ( name ) ,
88+ listObjects : async ( ) => Array . from ( store . get ( 'object' ) ?. values ( ) ?? [ ] ) ,
7889 } ;
7990
80- service . register ( 'object' , { name : 'account' , label : 'Account' } ) ;
81- service . register ( 'object' , { name : 'contact' , label : 'Contact' } ) ;
82- service . register ( 'view' , { name : 'account_list' , label : 'Account List' } ) ;
91+ await service . register ( 'object' , 'account ', { name : 'account' , label : 'Account' } ) ;
92+ await service . register ( 'object' , 'contact ', { name : 'contact' , label : 'Contact' } ) ;
93+ await service . register ( 'view' , 'account_list ', { name : 'account_list' , label : 'Account List' } ) ;
8394
84- expect ( service . list ( 'object' ) ) . toHaveLength ( 2 ) ;
85- expect ( service . list ( 'view' ) ) . toHaveLength ( 1 ) ;
86- expect ( service . list ( 'flow' ) ) . toHaveLength ( 0 ) ;
95+ expect ( await service . list ( 'object' ) ) . toHaveLength ( 2 ) ;
96+ expect ( await service . list ( 'view' ) ) . toHaveLength ( 1 ) ;
97+ expect ( await service . list ( 'flow' ) ) . toHaveLength ( 0 ) ;
98+ expect ( await service . listNames ( 'object' ) ) . toEqual ( [ 'account' , 'contact' ] ) ;
8799 } ) ;
88100} ) ;
0 commit comments