Skip to content

Commit 8065ea4

Browse files
committed
feat: modify existing implementation
1 parent 773f40b commit 8065ea4

32 files changed

+954
-233
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import { getIsNativeError } from '@aws-amplify/react-native/internals/utils';
2+
3+
import {
4+
PasskeyError,
5+
PasskeyErrorCode,
6+
} from '../../../../../src/client/utils/passkey/errors';
7+
import { handlePasskeyAuthenticationError } from '../../../../../src/client/utils/passkey/errors/handlePasskeyAuthenticationError.native';
8+
import { handlePasskeyError } from '../../../../../src/client/utils/passkey/errors/handlePasskeyError';
9+
import { passkeyErrorMap } from '../../../../../src/client/utils/passkey/errors/passkeyError';
10+
import { MockNativeError } from '../../../../mockData';
11+
12+
const mockHandlePasskeyError = jest.mocked(handlePasskeyError);
13+
jest.mock('../../../../../src/client/utils/passkey/errors/handlePasskeyError');
14+
15+
jest.mock('@aws-amplify/react-native/internals/utils', () => ({
16+
getIsNativeError: jest.fn(() => true),
17+
}));
18+
19+
const mockGetIsNativeError = jest.mocked(getIsNativeError);
20+
21+
describe('handlePasskeyAuthenticationError', () => {
22+
it('returns early if err is already instanceof PasskeyError', () => {
23+
const err = new PasskeyError({
24+
name: 'PasskeyErrorName',
25+
message: 'Error Message',
26+
});
27+
28+
expect(handlePasskeyAuthenticationError(err)).toBe(err);
29+
expect(mockGetIsNativeError).not.toHaveBeenCalled();
30+
});
31+
32+
it('returns new instance of PasskeyError with correct attributes when input error code is FAILED', () => {
33+
const err = new MockNativeError();
34+
err.code = 'FAILED';
35+
36+
const { message, recoverySuggestion } =
37+
passkeyErrorMap[PasskeyErrorCode.PasskeyRetrievalFailed];
38+
39+
expect(handlePasskeyAuthenticationError(err)).toMatchObject(
40+
new PasskeyError({
41+
name: PasskeyErrorCode.PasskeyRetrievalFailed,
42+
message,
43+
recoverySuggestion,
44+
underlyingError: err,
45+
}),
46+
);
47+
expect(mockGetIsNativeError).toHaveBeenCalledWith(err);
48+
});
49+
50+
it('returns new instance of PasskeyError with correct attributes when input error code is CANCELED', () => {
51+
const err = new MockNativeError();
52+
err.code = 'CANCELED';
53+
54+
const { message, recoverySuggestion } =
55+
passkeyErrorMap[PasskeyErrorCode.PasskeyAuthenticationCanceled];
56+
57+
expect(handlePasskeyAuthenticationError(err)).toMatchObject(
58+
new PasskeyError({
59+
name: PasskeyErrorCode.PasskeyAuthenticationCanceled,
60+
message,
61+
recoverySuggestion,
62+
underlyingError: err,
63+
}),
64+
);
65+
expect(mockGetIsNativeError).toHaveBeenCalledWith(err);
66+
});
67+
68+
it('invokes handlePasskeyError when input error does not match expected cases', () => {
69+
const err = new Error();
70+
err.name = 'Unknown';
71+
72+
handlePasskeyAuthenticationError(err);
73+
74+
expect(mockHandlePasskeyError).toHaveBeenCalledWith(err);
75+
expect(mockGetIsNativeError).toHaveBeenCalledWith(err);
76+
});
77+
});
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import {
2+
PasskeyError,
3+
PasskeyErrorCode,
4+
handlePasskeyAuthenticationError,
5+
} from '../../../../../src/client/utils/passkey/errors';
6+
import { handlePasskeyError } from '../../../../../src/client/utils/passkey/errors/handlePasskeyError';
7+
import { passkeyErrorMap } from '../../../../../src/client/utils/passkey/errors/passkeyError';
8+
9+
const mockHandlePasskeyError = jest.mocked(handlePasskeyError);
10+
jest.mock('../../../../../src/client/utils/passkey/errors/handlePasskeyError');
11+
12+
describe('handlePasskeyAuthenticationError', () => {
13+
it('returns early if err is already instanceof PasskeyError', () => {
14+
const err = new PasskeyError({
15+
name: 'PasskeyErrorName',
16+
message: 'Error Message',
17+
});
18+
19+
expect(handlePasskeyAuthenticationError(err)).toBe(err);
20+
});
21+
22+
it('returns new instance of PasskeyError with correct attributes when input error name is NotAllowedError', () => {
23+
const err = new Error();
24+
err.name = 'NotAllowedError';
25+
26+
const { message, recoverySuggestion } =
27+
passkeyErrorMap[PasskeyErrorCode.PasskeyAuthenticationCanceled];
28+
29+
expect(handlePasskeyAuthenticationError(err)).toMatchObject(
30+
new PasskeyError({
31+
name: PasskeyErrorCode.PasskeyAuthenticationCanceled,
32+
message,
33+
recoverySuggestion,
34+
underlyingError: err,
35+
}),
36+
);
37+
});
38+
39+
it('invokes handlePasskeyError when input error does not match expected cases', () => {
40+
const err = new Error();
41+
err.name = 'Unknown';
42+
43+
handlePasskeyAuthenticationError(err);
44+
45+
expect(mockHandlePasskeyError).toHaveBeenCalledWith(err);
46+
});
47+
});
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { AmplifyErrorCode } from '@aws-amplify/core/internals/utils';
2+
3+
import {
4+
PasskeyError,
5+
PasskeyErrorCode,
6+
} from '../../../../../src/client/utils/passkey/errors';
7+
import { handlePasskeyError } from '../../../../../src/client/utils/passkey/errors/handlePasskeyError.native';
8+
import { passkeyErrorMap } from '../../../../../src/client/utils/passkey/errors/passkeyError';
9+
import { MockNativeError } from '../../../../mockData';
10+
11+
jest.mock('@aws-amplify/react-native/internals/utils', () => ({
12+
getIsNativeError: jest.fn(() => true),
13+
}));
14+
15+
describe('handlePasskeyError', () => {
16+
it('returns new instance of PasskeyError with correct attributes when input error code is RELYING_PARTY_MISMATCH', () => {
17+
const err = new MockNativeError();
18+
err.code = 'RELYING_PARTY_MISMATCH';
19+
20+
const { message, recoverySuggestion } =
21+
passkeyErrorMap[PasskeyErrorCode.RelyingPartyMismatch];
22+
23+
expect(handlePasskeyError(err)).toMatchObject(
24+
new PasskeyError({
25+
name: PasskeyErrorCode.RelyingPartyMismatch,
26+
message,
27+
recoverySuggestion,
28+
underlyingError: err,
29+
}),
30+
);
31+
});
32+
33+
it('returns new instance of PasskeyError with correct attributes when input error code is NOT_SUPPORTED', () => {
34+
const err = new MockNativeError();
35+
err.code = 'NOT_SUPPORTED';
36+
37+
const { message, recoverySuggestion } =
38+
passkeyErrorMap[PasskeyErrorCode.PasskeyNotSupported];
39+
40+
expect(handlePasskeyError(err)).toMatchObject(
41+
new PasskeyError({
42+
name: PasskeyErrorCode.PasskeyNotSupported,
43+
message,
44+
recoverySuggestion,
45+
underlyingError: err,
46+
}),
47+
);
48+
});
49+
50+
it('returns unknown PasskeyError when input does not match expected cases', () => {
51+
const err = new MockNativeError();
52+
err.name = 'UNKNOWN';
53+
54+
expect(handlePasskeyError(err)).toMatchObject(
55+
new PasskeyError({
56+
name: AmplifyErrorCode.Unknown,
57+
message: 'An unknown error has occurred.',
58+
underlyingError: err,
59+
}),
60+
);
61+
});
62+
});
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { AmplifyErrorCode } from '@aws-amplify/core/internals/utils';
2+
3+
import {
4+
PasskeyError,
5+
PasskeyErrorCode,
6+
} from '../../../../../src/client/utils/passkey/errors';
7+
import { handlePasskeyError } from '../../../../../src/client/utils/passkey/errors/handlePasskeyError';
8+
import { passkeyErrorMap } from '../../../../../src/client/utils/passkey/errors/passkeyError';
9+
10+
describe('handlePasskeyError', () => {
11+
it('returns new instance of PasskeyError with correct attributes when input error name is AbortError', () => {
12+
const err = new Error();
13+
err.name = 'AbortError';
14+
15+
const { message, recoverySuggestion } =
16+
passkeyErrorMap[PasskeyErrorCode.PasskeyOperationAborted];
17+
18+
expect(handlePasskeyError(err)).toMatchObject(
19+
new PasskeyError({
20+
name: PasskeyErrorCode.PasskeyOperationAborted,
21+
message,
22+
recoverySuggestion,
23+
underlyingError: err,
24+
}),
25+
);
26+
});
27+
28+
it('returns new instance of PasskeyError with correct attributes when input error name is SecurityError', () => {
29+
const err = new Error();
30+
err.name = 'SecurityError';
31+
32+
const { message, recoverySuggestion } =
33+
passkeyErrorMap[PasskeyErrorCode.RelyingPartyMismatch];
34+
35+
expect(handlePasskeyError(err)).toMatchObject(
36+
new PasskeyError({
37+
name: PasskeyErrorCode.RelyingPartyMismatch,
38+
message,
39+
recoverySuggestion,
40+
underlyingError: err,
41+
}),
42+
);
43+
});
44+
45+
it('returns unknown PasskeyError when input does not match expected cases', () => {
46+
const err = new Error();
47+
err.name = 'Unknown';
48+
49+
expect(handlePasskeyError(err)).toMatchObject(
50+
new PasskeyError({
51+
name: AmplifyErrorCode.Unknown,
52+
message: 'An unknown error has occurred.',
53+
underlyingError: err,
54+
}),
55+
);
56+
});
57+
});
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import { getIsNativeError } from '@aws-amplify/react-native/internals/utils';
2+
3+
import {
4+
PasskeyError,
5+
PasskeyErrorCode,
6+
} from '../../../../../src/client/utils/passkey/errors';
7+
import { handlePasskeyRegistrationError } from '../../../../../src/client/utils/passkey/errors/handlePasskeyRegistrationError.native';
8+
import { handlePasskeyError } from '../../../../../src/client/utils/passkey/errors/handlePasskeyError';
9+
import { passkeyErrorMap } from '../../../../../src/client/utils/passkey/errors/passkeyError';
10+
import { MockNativeError } from '../../../../mockData';
11+
12+
const mockHandlePasskeyError = jest.mocked(handlePasskeyError);
13+
jest.mock('../../../../../src/client/utils/passkey/errors/handlePasskeyError');
14+
15+
jest.mock('@aws-amplify/react-native/internals/utils', () => ({
16+
getIsNativeError: jest.fn(() => true),
17+
}));
18+
19+
const mockGetIsNativeError = jest.mocked(getIsNativeError);
20+
21+
describe('handlePasskeyRegistrationError', () => {
22+
it('returns early if err is already instanceof PasskeyError', () => {
23+
const err = new PasskeyError({
24+
name: 'PasskeyErrorName',
25+
message: 'Error Message',
26+
});
27+
28+
expect(handlePasskeyRegistrationError(err)).toBe(err);
29+
expect(mockGetIsNativeError).not.toHaveBeenCalled();
30+
});
31+
32+
it('returns new instance of PasskeyError with correct attributes when input error code is FAILED', () => {
33+
const err = new MockNativeError();
34+
err.code = 'FAILED';
35+
36+
const { message, recoverySuggestion } =
37+
passkeyErrorMap[PasskeyErrorCode.PasskeyRegistrationFailed];
38+
39+
expect(handlePasskeyRegistrationError(err)).toMatchObject(
40+
new PasskeyError({
41+
name: PasskeyErrorCode.PasskeyRegistrationFailed,
42+
message,
43+
recoverySuggestion,
44+
underlyingError: err,
45+
}),
46+
);
47+
expect(mockGetIsNativeError).toHaveBeenCalledWith(err);
48+
});
49+
it('returns new instance of PasskeyError with correct attributes when input error code is DUPLICATE', () => {
50+
const err = new MockNativeError();
51+
err.code = 'DUPLICATE';
52+
53+
const { message, recoverySuggestion } =
54+
passkeyErrorMap[PasskeyErrorCode.PasskeyAlreadyExists];
55+
56+
expect(handlePasskeyRegistrationError(err)).toMatchObject(
57+
new PasskeyError({
58+
name: PasskeyErrorCode.PasskeyAlreadyExists,
59+
message,
60+
recoverySuggestion,
61+
underlyingError: err,
62+
}),
63+
);
64+
expect(mockGetIsNativeError).toHaveBeenCalledWith(err);
65+
});
66+
67+
it('returns new instance of PasskeyError with correct attributes when input error code is CANCELED', () => {
68+
const err = new MockNativeError();
69+
err.code = 'CANCELED';
70+
71+
const { message, recoverySuggestion } =
72+
passkeyErrorMap[PasskeyErrorCode.PasskeyRegistrationCanceled];
73+
74+
expect(handlePasskeyRegistrationError(err)).toMatchObject(
75+
new PasskeyError({
76+
name: PasskeyErrorCode.PasskeyRegistrationCanceled,
77+
message,
78+
recoverySuggestion,
79+
underlyingError: err,
80+
}),
81+
);
82+
expect(mockGetIsNativeError).toHaveBeenCalledWith(err);
83+
});
84+
85+
it('invokes handlePasskeyError when input error does not match expected cases', () => {
86+
const err = new Error();
87+
err.name = 'Unknown';
88+
89+
handlePasskeyRegistrationError(err);
90+
91+
expect(mockHandlePasskeyError).toHaveBeenCalledWith(err);
92+
expect(mockGetIsNativeError).toHaveBeenCalledWith(err);
93+
});
94+
});

0 commit comments

Comments
 (0)