@@ -42,6 +42,62 @@ beforeEach(() => {
4242 mocks . delete . mockReset ( ) ;
4343} ) ;
4444
45+ describe ( 'authFilesApi OAuth excluded model normalization' , ( ) => {
46+ it . each ( [
47+ { 'oauth-excluded-models' : null } ,
48+ { 'oauth-excluded-models' : { } } ,
49+ { items : null } ,
50+ { items : { } } ,
51+ { } ,
52+ null ,
53+ ] ) ( 'returns an empty map for %j' , async ( payload ) => {
54+ mocks . get . mockResolvedValue ( payload ) ;
55+
56+ await expect ( authFilesApi . getOauthExcludedModels ( ) ) . resolves . toEqual ( { } ) ;
57+ expect ( mocks . get ) . toHaveBeenCalledWith ( '/oauth-excluded-models' ) ;
58+ } ) ;
59+
60+ it . each ( [
61+ { 'oauth-excluded-models' : { ' Codex ' : [ ' model-a ' , 'MODEL-A' , 'model-b' ] } } ,
62+ { items : { ' Codex ' : [ ' model-a ' , 'MODEL-A' , 'model-b' ] } } ,
63+ { ' Codex ' : [ ' model-a ' , 'MODEL-A' , 'model-b' ] } ,
64+ { codex : ' model-a, MODEL-A\nmodel-b ' } ,
65+ ] ) ( 'preserves supported response formats and normalization for %j' , async ( payload ) => {
66+ mocks . get . mockResolvedValue ( payload ) ;
67+
68+ await expect ( authFilesApi . getOauthExcludedModels ( ) ) . resolves . toEqual ( {
69+ codex : [ 'model-a' , 'model-b' ] ,
70+ } ) ;
71+ } ) ;
72+
73+ it ( 'does not fall through an explicit null wrapper to items or provider keys' , async ( ) => {
74+ mocks . get . mockResolvedValue ( {
75+ 'oauth-excluded-models' : null ,
76+ items : { codex : [ 'model-a' ] } ,
77+ codex : [ 'model-b' ] ,
78+ } ) ;
79+
80+ await expect ( authFilesApi . getOauthExcludedModels ( ) ) . resolves . toEqual ( { } ) ;
81+ } ) ;
82+
83+ it ( 'does not fall through an explicit null items wrapper to provider keys' , async ( ) => {
84+ mocks . get . mockResolvedValue ( { items : null , codex : [ 'model-a' ] } ) ;
85+
86+ await expect ( authFilesApi . getOauthExcludedModels ( ) ) . resolves . toEqual ( { } ) ;
87+ } ) ;
88+
89+ it ( 'prefers the canonical wrapper over items' , async ( ) => {
90+ mocks . get . mockResolvedValue ( {
91+ 'oauth-excluded-models' : { codex : [ 'model-a' ] } ,
92+ items : { codex : [ 'model-b' ] } ,
93+ } ) ;
94+
95+ await expect ( authFilesApi . getOauthExcludedModels ( ) ) . resolves . toEqual ( {
96+ codex : [ 'model-a' ] ,
97+ } ) ;
98+ } ) ;
99+ } ) ;
100+
45101describe ( 'authFilesApi OAuth model alias normalization' , ( ) => {
46102 it ( 'preserves display-name and force-mapping returned by CPA' , async ( ) => {
47103 mocks . get . mockResolvedValue ( {
0 commit comments