Skip to content

Commit

Permalink
Added options to displayError so it can be adjusted on call
Browse files Browse the repository at this point in the history
Changed the default toast to 'sticky'
Changed references to displayError to take the change into account
  • Loading branch information
rob-baillie-ortoo committed Jan 26, 2022
1 parent ae97c73 commit 82c163d
Show file tree
Hide file tree
Showing 4 changed files with 150 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,22 @@ describe( 'configureSortableFields', () => {
expect( call ).toThrow( 'configureSortableFields called with a property (columnsProperty) that is not an Array of Objects.' );
});

// given an error, will dispatch it
// throws an exception - e.g. the object is immutable, will dispatch an error
it( 'when given an error, will report that error and return', () => {

const columns = [
{}
];

const objectToRunAgainst = {
columnsProperty: columns
};
const sortableColumns = [ 'field1', 'field2' ];

const error = 'This is an error';

DatatableHelper.configureSortableFields.call( objectToRunAgainst, 'columnsProperty', sortableColumns, error );

expect( displayError.mock.calls[0][0] ).toBe( 'This is an error' );
expect( displayError.mock.calls[0][1]?.title ).toBe( 'Sorting configuration error' );
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ const configureSortableFields = function( columnsPropertyName, fields, error ) {

if ( error ) {

displayError.call( this, error, errorTitle );
displayError.call( this, error, { title: errorTitle } );

} else if ( fields ) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ describe('displayError', () => {
expect( dispatchedEvent.detail.title ).toBe( 'c.ortoo_core_error_title' );
expect( dispatchedEvent.detail.message ).toBe( error );
expect( dispatchedEvent.detail.variant ).toBe( 'error' );
expect( dispatchedEvent.detail.mode ).toBe( 'sticky' );

expect( console.error ).toHaveBeenCalledTimes( 1 );
const reportedError = console.error.mock.calls[0][0];
Expand Down Expand Up @@ -59,6 +60,7 @@ describe('displayError', () => {
expect( dispatchedEvent.detail.title ).toBe( 'c.ortoo_core_error_title' );
expect( dispatchedEvent.detail.message ).toBe( 'javascript error format' );
expect( dispatchedEvent.detail.variant ).toBe( 'error' );
expect( dispatchedEvent.detail.mode ).toBe( 'sticky' );

expect( console.error ).toHaveBeenCalledTimes( 1 );
const reportedError = console.error.mock.calls[0][0];
Expand Down Expand Up @@ -89,6 +91,127 @@ describe('displayError', () => {
expect( dispatchedEvent.detail.title ).toBe( 'c.ortoo_core_error_title' );
expect( dispatchedEvent.detail.message ).toBe( 'An error message in the body' );
expect( dispatchedEvent.detail.variant ).toBe( 'error' );
expect( dispatchedEvent.detail.mode ).toBe( 'sticky' );

expect( console.error ).toHaveBeenCalledTimes( 1 );
const reportedError = console.error.mock.calls[0][0];

expect( reportedError ).toBe( error );
});

it( 'When given an options with a messagePrefix set, will use that to prefix the message and the rest defaulted', () => {

console.error = jest.fn();

const objectToRunAgainst = {
dispatchEvent: jest.fn()
};

const error = 'An error string';
const options = {
messagePrefix: 'Prefix'
};

displayError.call( objectToRunAgainst, error, options );

expect( objectToRunAgainst.dispatchEvent ).toBeCalled();

const dispatchedEvent = objectToRunAgainst.dispatchEvent.mock.calls[0][0];

expect( dispatchedEvent.detail.title ).toBe( 'c.ortoo_core_error_title' );
expect( dispatchedEvent.detail.message ).toBe( 'Prefix: An error string' );
expect( dispatchedEvent.detail.variant ).toBe( 'error' );
expect( dispatchedEvent.detail.mode ).toBe( 'sticky' );

expect( console.error ).toHaveBeenCalledTimes( 1 );
const reportedError = console.error.mock.calls[0][0];

expect( reportedError ).toBe( error );
});

it( 'When given an options with a variant set, will use that variant and the rest defaulted', () => {

console.error = jest.fn();

const objectToRunAgainst = {
dispatchEvent: jest.fn()
};

const error = 'An error string';
const options = {
variant: 'warning'
};

displayError.call( objectToRunAgainst, error, options );

expect( objectToRunAgainst.dispatchEvent ).toBeCalled();

const dispatchedEvent = objectToRunAgainst.dispatchEvent.mock.calls[0][0];

expect( dispatchedEvent.detail.title ).toBe( 'c.ortoo_core_error_title' );
expect( dispatchedEvent.detail.message ).toBe( 'An error string' );
expect( dispatchedEvent.detail.variant ).toBe( 'warning' );
expect( dispatchedEvent.detail.mode ).toBe( 'sticky' );

expect( console.error ).toHaveBeenCalledTimes( 1 );
const reportedError = console.error.mock.calls[0][0];

expect( reportedError ).toBe( error );
});

it( 'When given an options with title set, will use that as the title and the rest defaulted', () => {

console.error = jest.fn();

const objectToRunAgainst = {
dispatchEvent: jest.fn()
};

const error = 'An error string';
const options = {
title: 'replacement title'
};

displayError.call( objectToRunAgainst, error, options );

expect( objectToRunAgainst.dispatchEvent ).toBeCalled();

const dispatchedEvent = objectToRunAgainst.dispatchEvent.mock.calls[0][0];

expect( dispatchedEvent.detail.title ).toBe( options.title );
expect( dispatchedEvent.detail.message ).toBe( error );
expect( dispatchedEvent.detail.variant ).toBe( 'error' );
expect( dispatchedEvent.detail.mode ).toBe( 'sticky' );

expect( console.error ).toHaveBeenCalledTimes( 1 );
const reportedError = console.error.mock.calls[0][0];

expect( reportedError ).toBe( error );
});

it( 'When given an options with a mode set, will use that mode and the rest defaulted', () => {

console.error = jest.fn();

const objectToRunAgainst = {
dispatchEvent: jest.fn()
};

const error = 'An error string';
const options = {
mode: 'pester'
};

displayError.call( objectToRunAgainst, error, options );

expect( objectToRunAgainst.dispatchEvent ).toBeCalled();

const dispatchedEvent = objectToRunAgainst.dispatchEvent.mock.calls[0][0];

expect( dispatchedEvent.detail.title ).toBe( 'c.ortoo_core_error_title' );
expect( dispatchedEvent.detail.message ).toBe( 'An error string' );
expect( dispatchedEvent.detail.variant ).toBe( 'error' );
expect( dispatchedEvent.detail.mode ).toBe( 'pester' );

expect( console.error ).toHaveBeenCalledTimes( 1 );
const reportedError = console.error.mock.calls[0][0];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ import ERROR_TITLE from '@salesforce/label/c.ortoo_core_error_title';
/**
* When bound to a Lightning Web Component, will render the given error object.
*/
const displayError = function( error, title ) {
const displayError = function( error, options ) {

title = title ? title : ERROR_TITLE;
const title = options?.title ? options.title : ERROR_TITLE;
const messagePrefix = options?.messagePrefix ? options.messagePrefix + ': ' : '';
const mode = options?.mode ? options.mode : 'sticky';
const variant = options?.variant ? options.variant : 'error';

// By default we assume we have a string for the error
let message = error;
Expand All @@ -30,8 +33,9 @@ const displayError = function( error, title ) {

const toastEvent = new ShowToastEvent({
title: title,
message: message,
variant: 'error',
message: messagePrefix + message,
variant: variant,
mode: mode,
});
this.dispatchEvent( toastEvent );
}
Expand Down

0 comments on commit 82c163d

Please sign in to comment.