Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

import { getAmplifyServerContext } from '@aws-amplify/core/internals/adapter-core';

import { resolveServerContext } from '../../../../../src/providers/cognito/apis/server/resolveServerContext';
import { createMockAmplifyContext } from '../../../../testUtils/mockAmplifyContext';

jest.mock('@aws-amplify/core/internals/adapter-core');

const mockGetAmplifyServerContext = getAmplifyServerContext as jest.Mock;

describe('resolveServerContext', () => {
beforeEach(() => {
jest.clearAllMocks();
});

it('returns the AmplifyContext unchanged when it has a resourcesConfig', () => {
const ctx = createMockAmplifyContext({
Auth: {
Cognito: {
userPoolClientId: '111111-aaaaa-42d8-891d-ee81a1549398',
userPoolId: 'us-west-2_zzzzz',
},
},
});

expect(resolveServerContext(ctx)).toBe(ctx);
expect(mockGetAmplifyServerContext).not.toHaveBeenCalled();
});

it('resolves a legacy ContextSpec via getAmplifyServerContext(...).amplify', () => {
const sentinel = { resolved: 'amplify-server-context' } as any;
mockGetAmplifyServerContext.mockReturnValue({ amplify: sentinel });
const contextSpec = { token: { value: 'token' } } as any;

expect(resolveServerContext(contextSpec)).toBe(sentinel);
expect(mockGetAmplifyServerContext).toHaveBeenCalledWith(contextSpec);
});
});
19 changes: 9 additions & 10 deletions packages/auth/__tests__/providers/cognito/autoSignIn.test.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

import { Amplify } from 'aws-amplify';
import { Amplify } from '@aws-amplify/core';
import { clearGlobalContext } from '@aws-amplify/core/internals/utils';

import {
cognitoUserPoolsTokenProvider,
confirmSignUp,
signUp,
} from '../../../src/providers/cognito';
import { confirmSignUp, signUp } from '../../../src/providers/cognito';
import {
autoSignIn,
resetAutoSignIn,
Expand Down Expand Up @@ -45,10 +42,8 @@ const authConfig = {
userPoolId: 'us-west-2_zzzzz',
},
};
cognitoUserPoolsTokenProvider.setAuthConfig(authConfig);
Amplify.configure({
Auth: authConfig,
});

Amplify.configure({ Auth: authConfig });

const { user1 } = authAPITestParams;

Expand All @@ -73,6 +68,10 @@ describe('autoSignIn()', () => {
// to get around debounce on autoSignIn() APIs
jest.useFakeTimers();

afterAll(() => {
clearGlobalContext();
});

describe('handleUserSRPAuthFlow', () => {
beforeEach(() => {
mockCreateSignUpClient.mockReturnValueOnce(mockSignUp);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,34 +1,23 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

import { Amplify } from '@aws-amplify/core';

import { AuthError } from '../../../src/errors/AuthError';
import { AuthValidationErrorCode } from '../../../src/errors/types/validation';
import { confirmResetPassword } from '../../../src/providers/cognito';
import { ConfirmForgotPasswordException } from '../../../src/providers/cognito/types/errors';
import { createConfirmForgotPasswordClient } from '../../../src/foundation/factories/serviceClients/cognitoIdentityProvider';
import { createCognitoUserPoolEndpointResolver } from '../../../src/providers/cognito/factories';
import { createMockAmplifyContext } from '../../testUtils/mockAmplifyContext';

import { authAPITestParams } from './testUtils/authApiTestParams';
import { getMockError } from './testUtils/data';
import { setUpGetConfig } from './testUtils/setUpGetConfig';

jest.mock('@aws-amplify/core', () => ({
...(jest.createMockFromModule('@aws-amplify/core') as object),
Amplify: { getConfig: jest.fn(() => ({})) },
}));
jest.mock('@aws-amplify/core/internals/utils', () => ({
...jest.requireActual('@aws-amplify/core/internals/utils'),
isBrowser: jest.fn(() => false),
}));

jest.mock(
'../../../src/foundation/factories/serviceClients/cognitoIdentityProvider',
);
jest.mock('../../../src/providers/cognito/factories');

describe('confirmResetPassword', () => {
// assert mocks
const mockConfirmForgotPassword = jest.fn();
const mockCreateConfirmResetPasswordClient = jest.mocked(
createConfirmForgotPasswordClient,
Expand All @@ -37,8 +26,14 @@ describe('confirmResetPassword', () => {
createCognitoUserPoolEndpointResolver,
);

beforeAll(() => {
setUpGetConfig(Amplify);
const mockCtx = createMockAmplifyContext({
Auth: {
Cognito: {
userPoolClientId: '111111-aaaaa-42d8-891d-ee81a1549398',
userPoolId: 'us-west-2_zzzzz',
identityPoolId: 'us-west-2:xxxxxx',
},
},
});

beforeEach(() => {
Expand All @@ -58,14 +53,17 @@ describe('confirmResetPassword', () => {

it('should call the confirmForgotPassword and return void', async () => {
await expect(
confirmResetPassword(authAPITestParams.confirmResetPasswordRequest),
confirmResetPassword(
mockCtx,
authAPITestParams.confirmResetPasswordRequest,
),
).resolves.toBeUndefined();
expect(mockConfirmForgotPassword).toHaveBeenCalled();
});

it('invokes createCognitoUserPoolEndpointResolver with expected endpointOverride', async () => {
const expectedUserPoolEndpoint = 'https://my-custom-endpoint.com';
jest.mocked(Amplify.getConfig).mockReturnValueOnce({
const customCtx = createMockAmplifyContext({
Auth: {
Cognito: {
userPoolClientId: '111111-aaaaa-42d8-891d-ee81a1549398',
Expand All @@ -76,15 +74,18 @@ describe('confirmResetPassword', () => {
},
});

await confirmResetPassword(authAPITestParams.confirmResetPasswordRequest);
await confirmResetPassword(
customCtx,
authAPITestParams.confirmResetPasswordRequest,
);

expect(mockCreateCognitoUserPoolEndpointResolver).toHaveBeenCalledWith({
endpointOverride: expectedUserPoolEndpoint,
});
});

it('should contain clientMetadata from request', async () => {
await confirmResetPassword({
await confirmResetPassword(mockCtx, {
username: 'username',
newPassword: 'password',
confirmationCode: 'code',
Expand All @@ -107,7 +108,7 @@ describe('confirmResetPassword', () => {
it('should throw an error when username is empty', async () => {
expect.assertions(2);
try {
await confirmResetPassword({
await confirmResetPassword(mockCtx, {
username: '',
newPassword: 'password',
confirmationCode: 'code',
Expand All @@ -123,7 +124,7 @@ describe('confirmResetPassword', () => {
it('should throw an error when newPassword is empty', async () => {
expect.assertions(2);
try {
await confirmResetPassword({
await confirmResetPassword(mockCtx, {
username: 'username',
newPassword: '',
confirmationCode: 'code',
Expand All @@ -139,7 +140,7 @@ describe('confirmResetPassword', () => {
it('should throw an error when confirmationCode is empty', async () => {
expect.assertions(2);
try {
await confirmResetPassword({
await confirmResetPassword(mockCtx, {
username: 'username',
newPassword: 'password',
confirmationCode: '',
Expand All @@ -160,7 +161,10 @@ describe('confirmResetPassword', () => {
);
});
try {
await confirmResetPassword(authAPITestParams.confirmResetPasswordRequest);
await confirmResetPassword(
mockCtx,
authAPITestParams.confirmResetPasswordRequest,
);
} catch (error: any) {
expect(error).toBeInstanceOf(AuthError);
expect(error.name).toBe(
Expand All @@ -176,7 +180,7 @@ describe('confirmResetPassword', () => {
},
};

await confirmResetPassword({
await confirmResetPassword(mockCtx, {
username: 'username',
newPassword: 'password',
confirmationCode: 'code',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,31 @@
import { Amplify } from '@aws-amplify/core';

import { AuthError } from '../../../src/errors/AuthError';
import { AuthValidationErrorCode } from '../../../src/errors/types/validation';
import { confirmSignIn } from '../../../src/providers/cognito/apis/confirmSignIn';
import { RespondToAuthChallengeException } from '../../../src/providers/cognito/types/errors';
import { signInStore } from '../../../src/client/utils/store';
import { AuthErrorCodes } from '../../../src/common/AuthErrorStrings';
import { createRespondToAuthChallengeClient } from '../../../src/foundation/factories/serviceClients/cognitoIdentityProvider';
import { createMockAmplifyContext } from '../../testUtils/mockAmplifyContext';

import { getMockError } from './testUtils/data';
import { setUpGetConfig } from './testUtils/setUpGetConfig';
import { authAPITestParams } from './testUtils/authApiTestParams';

jest.mock('@aws-amplify/core', () => ({
...(jest.createMockFromModule('@aws-amplify/core') as object),
Amplify: { getConfig: jest.fn(() => ({})) },
}));
jest.mock('../../../src/client/utils/store');
jest.mock(
'../../../src/foundation/factories/serviceClients/cognitoIdentityProvider',
);
jest.mock('../../../src/providers/cognito/factories');

const mockCtx = createMockAmplifyContext({
Auth: {
Cognito: {
userPoolClientId: '111111-aaaaa-42d8-891d-ee81a1549398',
userPoolId: 'us-west-2_zzzzz',
identityPoolId: 'us-west-2:xxxxxx',
},
},
});

describe('confirmSignIn API error path cases:', () => {
const challengeName = 'SELECT_MFA_TYPE';
const signInSession = '1234234232';
Expand All @@ -34,7 +38,6 @@ describe('confirmSignIn API error path cases:', () => {
);

beforeAll(() => {
setUpGetConfig(Amplify);
mockStoreGetState.mockReturnValue({
username,
challengeName,
Expand All @@ -56,7 +59,7 @@ describe('confirmSignIn API error path cases:', () => {
it('confirmSignIn API should throw an error when challengeResponse is empty', async () => {
expect.assertions(2);
try {
await confirmSignIn({ challengeResponse: '' });
await confirmSignIn(mockCtx, { challengeResponse: '' });
} catch (error: any) {
expect(error).toBeInstanceOf(AuthError);
expect(error.name).toBe(AuthValidationErrorCode.EmptyChallengeResponse);
Expand All @@ -66,7 +69,7 @@ describe('confirmSignIn API error path cases:', () => {
it('should throw an error when sign-in step is CONTINUE_SIGN_IN_WITH_MFA_SELECTION and challengeResponse is not "SMS", "TOTP", or "EMAIL"', async () => {
expect.assertions(2);
try {
await confirmSignIn({ challengeResponse: 'NO_SMS' });
await confirmSignIn(mockCtx, { challengeResponse: 'NO_SMS' });
} catch (error: any) {
expect(error).toBeInstanceOf(AuthError);
expect(error.name).toBe(AuthValidationErrorCode.IncorrectMFAMethod);
Expand All @@ -81,7 +84,7 @@ describe('confirmSignIn API error path cases:', () => {
);
});
try {
await confirmSignIn({ challengeResponse: 'TOTP' });
await confirmSignIn(mockCtx, { challengeResponse: 'TOTP' });
} catch (error: any) {
expect(error).toBeInstanceOf(AuthError);
expect(error.name).toBe(
Expand All @@ -99,7 +102,7 @@ describe('confirmSignIn API error path cases:', () => {
});

try {
await confirmSignIn({
await confirmSignIn(mockCtx, {
challengeResponse: 'SMS',
});
} catch (err: any) {
Expand Down
Loading
Loading