woocommerce/plugins/woocommerce-blocks/assets/js/base/components/notice-banner/test/index.tsx

100 lines
2.9 KiB
TypeScript
Raw Normal View History

Feature Branch: Updated Shopper Notices (https://github.com/woocommerce/woocommerce-blocks/pull/8659) * Notice banner component * Snackbar support * Switch to new components * Finish snackbar implementation * Summary notice * Styling issues * Fix text wrap in shipping calculator * Storybook entries * Docs and tests for NoticeBanner * Framer motion to avoid components dependency * Snackbar list stories * Docs for snackbar list * Update assets/js/base/components/notice-banner/README.md Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Update assets/js/base/components/notice-banner/README.md Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Update assets/js/base/components/notice-banner/README.md Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Update assets/js/base/components/notice-banner/README.md Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Update assets/js/base/components/notice-banner/README.md Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> * Types/docblocks * Docs * Update notice type * Use NoticeBannerProps for type of noticeProps * Raw html to fix notice encoding * getClassNameFromStatus is unused * Update position text * Clarify notice text * Fix hover style in whisper TT3 theme * remove div styles * Add new templates for legacy buyer notices in WooCommerce core (https://github.com/woocommerce/woocommerce-blocks/pull/8732) * Add templates for legacy core notices * Update src/Domain/Services/Notices.php Co-authored-by: Paulo Arromba <17236129+wavvves@users.noreply.github.com> * Remove debugging code * DRY get_notices_template * Simplify error template * Fix padding * Only include new notices if using block cart/checkout --------- Co-authored-by: Paulo Arromba <17236129+wavvves@users.noreply.github.com> * Fix view box tag * Hover and focus styles * Styling when notices added via ajax * Remove margin change * Implement react-transition-group instead of framer (https://github.com/woocommerce/woocommerce-blocks/pull/8920) * Add screenshots to docs --------- Co-authored-by: Thomas Roberts <5656702+opr@users.noreply.github.com> Co-authored-by: Paulo Arromba <17236129+wavvves@users.noreply.github.com>
2023-04-05 12:43:03 +00:00
/**
* External dependencies
*/
import { render, fireEvent, findByText } from '@testing-library/react';
/**
* Internal dependencies
*/
import NoticeBanner from '../index';
describe( 'NoticeBanner', () => {
test( 'renders without errors when all required props are provided', async () => {
const { container } = render(
<NoticeBanner status="error">This is an error message</NoticeBanner>
);
expect(
await findByText( container, 'This is an error message' )
).toBeInTheDocument();
} );
test( 'displays the notice message correctly', () => {
const message = 'This is a test message';
const { getByText } = render(
<NoticeBanner status="success" spokenMessage="Speech">
{ message }
</NoticeBanner>
);
const messageElement = getByText( message );
expect( messageElement ).toBeInTheDocument();
} );
test( 'displays the correct status for the notice', () => {
const { container } = render(
<NoticeBanner status="warning">
This is a warning message
</NoticeBanner>
);
expect( container.querySelector( '.is-warning' ) ).toBeInTheDocument();
} );
test( 'displays the summary correctly when provided', () => {
const summaryText = '4 new messages';
const { getByText } = render(
<NoticeBanner status="default" summary={ summaryText }>
This is a test message
</NoticeBanner>
);
const summaryElement = getByText( summaryText );
expect( summaryElement ).toBeInTheDocument();
} );
test( 'can be dismissed when isDismissible prop is true', () => {
const onRemoveMock = jest.fn();
const { getByRole } = render(
<NoticeBanner
status="success"
isDismissible
onRemove={ onRemoveMock }
>
This is a success message
</NoticeBanner>
);
const closeButton = getByRole( 'button' );
fireEvent.click( closeButton );
expect( onRemoveMock ).toHaveBeenCalled();
} );
test( 'calls onRemove function when the notice is dismissed', () => {
const onRemoveMock = jest.fn();
const { getByRole } = render(
<NoticeBanner status="info" isDismissible onRemove={ onRemoveMock }>
This is an informative message
</NoticeBanner>
);
const closeButton = getByRole( 'button' );
fireEvent.click( closeButton );
expect( onRemoveMock ).toHaveBeenCalled();
} );
test( 'applies the className prop to the notice', () => {
const customClassName = 'my-custom-class';
const { container } = render(
<NoticeBanner status="success" className={ customClassName }>
This is a success message
</NoticeBanner>
);
const noticeElement = container.firstChild;
expect( noticeElement ).toHaveClass( customClassName );
} );
test( 'does not throw any errors when all props are provided correctly', () => {
const spyError = jest.spyOn( console, 'error' );
render(
<NoticeBanner status="default">This is a test message</NoticeBanner>
);
expect( spyError ).not.toHaveBeenCalled(); // Should not print any error/warning messages
spyError.mockRestore(); // Restore the original mock
} );
} );