Skip to content

Commit ab5c2a0

Browse files
authored
Increase unit test coverage for saml.ts to 100% (#9131)
* Increase unit test coverage for saml.ts to 100%
1 parent 8072572 commit ab5c2a0

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

packages/auth/src/core/providers/saml.test.ts

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { OperationType } from '../../model/enums';
2222
import { TEST_ID_TOKEN_RESPONSE } from '../../../test/helpers/id_token_response';
2323
import { testUser, testAuth } from '../../../test/helpers/mock_auth';
2424
import { TaggedWithTokenResponse } from '../../model/id_token';
25+
import { SAMLAuthCredential } from '../credentials/saml';
2526
import { AuthErrorCode } from '../errors';
2627
import { UserCredentialImpl } from '../user/user_credential_impl';
2728
import { _createError } from '../util/assert';
@@ -45,6 +46,17 @@ describe('core/providers/saml', () => {
4546
expect(cred.signInMethod).to.eq('saml.provider');
4647
});
4748

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(/auth\/argument-error/);
58+
});
59+
4860
it('credentialFromResult returns null if provider ID not specified', async () => {
4961
const auth = await testAuth();
5062
const userCred = new UserCredentialImpl({
@@ -73,4 +85,78 @@ describe('core/providers/saml', () => {
7385
expect(cred.providerId).to.eq('saml.provider');
7486
expect(cred.signInMethod).to.eq('saml.provider');
7587
});
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+
});
76162
});

0 commit comments

Comments
 (0)