/**
* External dependencies
*/
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom/extend-expect';
import { AnyInterpreter } from 'xstate';
/**
* Internal dependencies
*/
import { Intro } from '../';
import { useNetworkStatus } from '~/utils/react-hooks/use-network-status';
import { FlowType } from '~/customize-store/types';
jest.mock( '../../assembler-hub/site-hub', () => ( {
SiteHub: jest.fn( () => null ),
} ) );
jest.mock( '~/utils/react-hooks/use-network-status', () => ( {
useNetworkStatus: jest.fn(),
} ) );
jest.mock( '@wordpress/data', () => {
const originalModule = jest.requireActual( '@wordpress/data' );
return {
...originalModule,
useSelect: jest.fn( () => ( {
is_block_theme: true,
} ) ),
};
} );
describe( 'Intro Banners', () => {
it( 'should display NetworkOfflineBanner when network is offline', () => {
( useNetworkStatus as jest.Mock ).mockImplementation( () => true );
render(
);
expect(
screen.getByText( /Please check your internet connection./i )
).toBeInTheDocument();
} );
it( 'should display the default banner by default', () => {
const sendEventMock = jest.fn();
( useNetworkStatus as jest.Mock ).mockImplementation( () => false );
render(
);
expect(
screen.getByText( /Use the power of AI to design your store/i )
).toBeInTheDocument();
const button = screen.getByRole( 'button', {
name: /Design with AI/i,
} );
fireEvent.click( button );
expect( sendEventMock ).toHaveBeenCalledWith( {
type: 'DESIGN_WITH_AI',
} );
} );
it( 'should display the existing ai theme banner when customizeStoreTaskCompleted and currentThemeIsAiGenerated', () => {
const sendEventMock = jest.fn();
( useNetworkStatus as jest.Mock ).mockImplementation( () => false );
render(
);
expect(
screen.getByText( /Customize your custom theme/i )
).toBeInTheDocument();
} );
} );