@@ -22,6 +22,7 @@ import { OperationType } from '../../model/enums';
22
22
import { TEST_ID_TOKEN_RESPONSE } from '../../../test/helpers/id_token_response' ;
23
23
import { testUser , testAuth } from '../../../test/helpers/mock_auth' ;
24
24
import { TaggedWithTokenResponse } from '../../model/id_token' ;
25
+ import { SAMLAuthCredential } from '../credentials/saml' ;
25
26
import { AuthErrorCode } from '../errors' ;
26
27
import { UserCredentialImpl } from '../user/user_credential_impl' ;
27
28
import { _createError } from '../util/assert' ;
@@ -45,6 +46,17 @@ describe('core/providers/saml', () => {
45
46
expect ( cred . signInMethod ) . to . eq ( 'saml.provider' ) ;
46
47
} ) ;
47
48
49
+ it ( 'generates SAML provider' , ( ) => {
50
+ const provider = new SAMLAuthProvider ( 'saml.provider' ) ;
51
+ expect ( provider . providerId ) . to . eq ( 'saml.provider' ) ;
52
+ } ) ;
53
+
54
+ it ( 'returns error for invalid SAML provdier' , ( ) => {
55
+ expect ( ( ) => {
56
+ new SAMLAuthProvider ( 'provider' ) ;
57
+ } ) . throw ( / a u t h \/ a r g u m e n t - e r r o r / ) ;
58
+ } ) ;
59
+
48
60
it ( 'credentialFromResult returns null if provider ID not specified' , async ( ) => {
49
61
const auth = await testAuth ( ) ;
50
62
const userCred = new UserCredentialImpl ( {
@@ -73,4 +85,78 @@ describe('core/providers/saml', () => {
73
85
expect ( cred . providerId ) . to . eq ( 'saml.provider' ) ;
74
86
expect ( cred . signInMethod ) . to . eq ( 'saml.provider' ) ;
75
87
} ) ;
88
+
89
+ it ( 'credentialFromJSON returns SAML credential from valid object' , ( ) => {
90
+ const json = {
91
+ providerId : 'saml.provider' ,
92
+ signInMethod : 'saml.provider' ,
93
+ pendingToken : 'fake-pending-token'
94
+ } ;
95
+
96
+ const credential = SAMLAuthProvider . credentialFromJSON ( json ) ;
97
+ expect ( credential . providerId ) . to . eq ( 'saml.provider' ) ;
98
+ expect ( credential . signInMethod ) . to . eq ( 'saml.provider' ) ;
99
+ expect ( ( credential as any ) . pendingToken ) . to . eq ( 'fake-pending-token' ) ;
100
+ } ) ;
101
+
102
+ it ( 'returns null when _tokenResponse is missing (undefined)' , ( ) => {
103
+ const error = _createError ( AuthErrorCode . NEED_CONFIRMATION , {
104
+ appName : 'test-app'
105
+ } ) ;
106
+
107
+ error . customData = { } ; // _tokenResponse missing
108
+ const credential = SAMLAuthProvider . credentialFromError ( error ) ;
109
+ expect ( credential ) . to . be . null ;
110
+ } ) ;
111
+
112
+ it ( 'returns null when _tokenResponse is missing oauthAccessToken key' , ( ) => {
113
+ const error = _createError ( AuthErrorCode . NEED_CONFIRMATION , {
114
+ appName : 'foo'
115
+ } ) ;
116
+ error . customData = {
117
+ _tokenResponse : {
118
+ // intentionally missing oauthAccessToken
119
+ idToken : 'some-id-token' ,
120
+ oauthAccessToken : null
121
+ }
122
+ } ;
123
+
124
+ const cred = SAMLAuthProvider . credentialFromError ( error ) ;
125
+ expect ( cred ) . to . be . null ;
126
+ } ) ;
127
+
128
+ it ( 'returns null if _create throws internally' , ( ) => {
129
+ const originalCreate = ( SAMLAuthCredential as any ) . _create ;
130
+
131
+ ( SAMLAuthCredential as any ) . _create = ( ) => {
132
+ throw new Error ( 'Simulated error' ) ;
133
+ } ;
134
+
135
+ const error = _createError ( AuthErrorCode . NEED_CONFIRMATION , {
136
+ appName : 'test-app'
137
+ } ) ;
138
+
139
+ error . customData = {
140
+ _tokenResponse : {
141
+ pendingToken : 'valid-token' ,
142
+ providerId : 'saml.my-provider'
143
+ }
144
+ } ;
145
+
146
+ const cred = SAMLAuthProvider . credentialFromError ( error ) ;
147
+ expect ( cred ) . to . be . null ;
148
+
149
+ ( SAMLAuthCredential as any ) . _create = originalCreate ;
150
+ } ) ;
151
+
152
+ it ( 'returns null when customData is undefined (falls back to empty object)' , ( ) => {
153
+ const error = _createError ( AuthErrorCode . NEED_CONFIRMATION , {
154
+ appName : 'test-app'
155
+ } ) ;
156
+
157
+ delete ( error as any ) . customData ;
158
+
159
+ const credential = SAMLAuthProvider . credentialFromError ( error ) ;
160
+ expect ( credential ) . to . be . null ;
161
+ } ) ;
76
162
} ) ;
0 commit comments