Skip to content

Commit

Permalink
chore: log error for stackUpdateComplete (#13773)
Browse files Browse the repository at this point in the history
* chore: log error for stackUpdateComplete

* Revert "chore: log error for stackUpdateComplete"

This reverts commit 3972e9f.

* chore: log stackUpdateComplete message with errorDetails

* chore: tweak stackUpdateComplete message with errorDetails

* Update packages/amplify-provider-awscloudformation/src/aws-utils/aws-cfn.js

Co-authored-by: Kamil Sobol <[email protected]>

* chore: import EOL from os

* chore: change printAmplifyException instead of aws-cfn

* Update packages/amplify-cli/src/amplify-exception-handler.ts

Co-authored-by: Amplifiyer <[email protected]>

* chore: import EOL from os

* test: fix amplify-exception-handler

* test: fix amplify-exception-handler

* chore: make test error mock content explicitly different

---------

Co-authored-by: 0.618 <[email protected]>
Co-authored-by: Kamil Sobol <[email protected]>
Co-authored-by: Amplifiyer <[email protected]>
  • Loading branch information
4 people authored May 15, 2024
1 parent 3db951a commit d583756
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { EOL } from 'os';
import { AmplifyError } from '@aws-amplify/amplify-cli-core';
import { printer } from '@aws-amplify/amplify-prompts'; // eslint-disable-line import/no-extraneous-dependencies
import { reportError } from '../commands/diagnose';
Expand Down Expand Up @@ -56,30 +57,34 @@ describe('test exception handler', () => {

it('error handler should print error', async () => {
const amplifyError = new AmplifyError('NotImplementedError', {
message: 'Test Not implemented',
details: 'Test Not implemented',
resolution: 'Test Not implemented',
message: 'Test Not implemented(message)',
details: 'Test Not implemented(details)',
resolution: 'Test Not implemented(resolution)',
});

await handleException(amplifyError);

expect(printerMock.error).toHaveBeenCalledWith(amplifyError.message);
expect(printerMock.info).toHaveBeenCalledWith(amplifyError.details);
expect(printerMock.error).toHaveBeenCalledWith(`${amplifyError.message}${EOL}${amplifyError.details}`);
expect(printerMock.info).toHaveBeenCalledTimes(2);
expect(printerMock.info).toHaveBeenNthCalledWith(1, `Resolution: ${amplifyError.resolution}`);
expect(printerMock.info).toHaveBeenLastCalledWith('Learn more at: https://docs.amplify.aws/cli/project/troubleshooting/');
expect(printerMock.debug).toHaveBeenCalledWith(amplifyError.stack);
});

it('error handler should handle encountered errors gracefully', async () => {
const amplifyError = new AmplifyError('NotImplementedError', {
message: 'Test Not implemented',
details: 'Test Not implemented',
resolution: 'Test Not implemented',
message: 'Test Not implemented(message)',
details: 'Test Not implemented(details)',
resolution: 'Test Not implemented(resolution)',
});

reportErrorMock.mockRejectedValueOnce(new Error('MockTestError'));
await handleException(amplifyError);

expect(printerMock.error).toHaveBeenCalledWith(amplifyError.message);
expect(printerMock.info).toHaveBeenCalledWith(amplifyError.details);
expect(printerMock.error).toHaveBeenCalledWith(`${amplifyError.message}${EOL}${amplifyError.details}`);
expect(printerMock.info).toHaveBeenCalledTimes(2);
expect(printerMock.info).toHaveBeenNthCalledWith(1, `Resolution: ${amplifyError.resolution}`);
expect(printerMock.info).toHaveBeenLastCalledWith('Learn more at: https://docs.amplify.aws/cli/project/troubleshooting/');
expect(printerMock.debug).toHaveBeenCalledWith(amplifyError.stack);
expect(printerMock.error).toHaveBeenCalledWith('Failed to report error: MockTestError');
});
Expand Down
7 changes: 4 additions & 3 deletions packages/amplify-cli/src/amplify-exception-handler.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { EOL } from 'os';
import {
$TSAny,
AmplifyException,
Expand Down Expand Up @@ -123,10 +124,10 @@ const executeSafely = async (functionToExecute: () => Promise<void> | void, erro

const printAmplifyException = (amplifyException: AmplifyException): void => {
const { message, details, resolution, link, stack } = amplifyException;

printer.error(message);
if (details) {
printer.info(details);
printer.error(message + EOL + details);
} else {
printer.error(message);
}
printer.blankLine();
if (resolution) {
Expand Down

0 comments on commit d583756

Please sign in to comment.