Add tests for experimental add product task
This commit is contained in:
parent
cbfc393c6a
commit
6248683042
|
@ -0,0 +1,80 @@
|
||||||
|
/**
|
||||||
|
* External dependencies
|
||||||
|
*/
|
||||||
|
import { render, waitFor } from '@testing-library/react';
|
||||||
|
import userEvent from '@testing-library/user-event';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal dependencies
|
||||||
|
*/
|
||||||
|
import { Products } from '../';
|
||||||
|
import { productTypes } from '../constants';
|
||||||
|
import { getAdminSetting } from '~/utils/admin-settings';
|
||||||
|
|
||||||
|
jest.mock( '@wordpress/data', () => ( {
|
||||||
|
...jest.requireActual( '@wordpress/data' ),
|
||||||
|
useSelect: jest.fn(),
|
||||||
|
} ) );
|
||||||
|
|
||||||
|
jest.mock( '~/utils/admin-settings', () => ( {
|
||||||
|
getAdminSetting: jest.fn(),
|
||||||
|
} ) );
|
||||||
|
|
||||||
|
describe( 'Products', () => {
|
||||||
|
beforeEach( () => {
|
||||||
|
jest.clearAllMocks();
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should render all products types without view less button when onboardingData.profile.productType is null', () => {
|
||||||
|
( getAdminSetting as jest.Mock ).mockImplementation( () => ( {
|
||||||
|
profile: {
|
||||||
|
product_types: null,
|
||||||
|
},
|
||||||
|
} ) );
|
||||||
|
const { queryByText } = render( <Products /> );
|
||||||
|
|
||||||
|
productTypes.forEach( ( { title } ) => {
|
||||||
|
expect( queryByText( title ) ).toBeInTheDocument();
|
||||||
|
} );
|
||||||
|
|
||||||
|
expect(
|
||||||
|
queryByText( 'View more product types' )
|
||||||
|
).not.toBeInTheDocument();
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should render digital products type with view more button', () => {
|
||||||
|
( getAdminSetting as jest.Mock ).mockImplementation( () => ( {
|
||||||
|
profile: {
|
||||||
|
product_types: [ 'downloads' ],
|
||||||
|
},
|
||||||
|
} ) );
|
||||||
|
const { queryByText, queryByRole } = render( <Products /> );
|
||||||
|
|
||||||
|
expect( queryByText( 'Digital product' ) ).toBeInTheDocument();
|
||||||
|
expect( queryByRole( 'menu' )?.childElementCount ).toBe( 1 );
|
||||||
|
expect( queryByText( 'View more product types' ) ).toBeInTheDocument();
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should render all products type when clicking view more button', async () => {
|
||||||
|
( getAdminSetting as jest.Mock ).mockImplementation( () => ( {
|
||||||
|
profile: {
|
||||||
|
product_types: [ 'downloads' ],
|
||||||
|
},
|
||||||
|
} ) );
|
||||||
|
const { queryByText, getByRole, queryByRole } = render( <Products /> );
|
||||||
|
|
||||||
|
expect( queryByText( 'View more product types' ) ).toBeInTheDocument();
|
||||||
|
|
||||||
|
userEvent.click(
|
||||||
|
getByRole( 'button', { name: 'View more product types' } )
|
||||||
|
);
|
||||||
|
|
||||||
|
await waitFor( () =>
|
||||||
|
expect( queryByRole( 'menu' )?.childElementCount ).toBe(
|
||||||
|
productTypes.length
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( queryByText( 'View less product types' ) ).toBeInTheDocument();
|
||||||
|
} );
|
||||||
|
} );
|
|
@ -0,0 +1,41 @@
|
||||||
|
/**
|
||||||
|
* Internal dependencies
|
||||||
|
*/
|
||||||
|
import { getProductTypes, getSurfacedProductKeys } from '../utils';
|
||||||
|
import { productTypes, onboardingProductTypesToSurfaced } from '../constants';
|
||||||
|
|
||||||
|
describe( 'getProductTypes', () => {
|
||||||
|
it( 'should return the product types', () => {
|
||||||
|
expect( getProductTypes() ).toEqual( productTypes );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should return the product types without excluded items', () => {
|
||||||
|
expect(
|
||||||
|
getProductTypes( [ 'external', 'digital' ] ).map( ( p ) => p.key )
|
||||||
|
).toEqual( [ 'physical', 'variable', 'subscription', 'grouped' ] );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
describe( 'getSurfacedProductKeys', () => {
|
||||||
|
test.each( [
|
||||||
|
{
|
||||||
|
selectedTypes: [ 'physical' ],
|
||||||
|
expected: onboardingProductTypesToSurfaced.physical,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
selectedTypes: [ 'physical', 'downloads' ],
|
||||||
|
expected: onboardingProductTypesToSurfaced[ 'downloads,physical' ],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
selectedTypes: [],
|
||||||
|
expected: productTypes.map( ( p ) => p.key ),
|
||||||
|
},
|
||||||
|
] )(
|
||||||
|
'should return expected surfaced product keys when onboarding product type contains $selected',
|
||||||
|
( { selectedTypes, expected } ) => {
|
||||||
|
expect( getSurfacedProductKeys( selectedTypes ) ).toEqual(
|
||||||
|
expected
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} );
|
Loading…
Reference in New Issue