jest.mock( '@woocommerce/tracks' );
jest.mock( '../data/settings/selectors', () => ( {
...jest.requireActual( '../data/settings/selectors' ), // import and retain the original functionalities
isTrackingConfigured: jest.fn().mockReturnValue( false ),
isDomainVerified: jest.fn().mockReturnValue( false ),
} ) );
/**
* External dependencies
*/
import { recordEvent } from '@woocommerce/tracks';
import '@testing-library/jest-dom';
import { fireEvent, render } from '@testing-library/react';
import { getQuery } from '@woocommerce/navigation';
/**
* Internal dependencies
*/
import WizardApp from './WizardApp';
import '../../../tests/custom-matchers';
import {
isDomainVerified,
isTrackingConfigured,
} from '../data/settings/selectors';
recordEvent.mockName( 'recordEvent' );
//Needed to be able to render the Stepper component
jest.mock( '../steps/SetupAccount', () => () => null );
jest.mock( '../steps/ClaimWebsite', () => () => null );
jest.mock( '../steps/SetupTracking', () => () => null );
const stepOne = /Set up your business account/;
const stepTwo = /Claim your website/;
describe( 'WizardApp component', () => {
describe( 'First rendering', () => {
let rendered;
beforeEach( () => {
wcSettings.pinterest_for_woocommerce.isBusinessConnected = false;
wcSettings.pinterest_for_woocommerce.isConnected = false;
rendered = render( <WizardApp query={ getQuery() } /> );
} );
test( 'should show all options and first step should be clickable', () => {
expect( rendered.getByText( stepOne ) ).toBeInTheDocument();
expect( rendered.getByText( stepTwo ) ).toBeInTheDocument();
expect( rendered.queryAllByRole( 'button' ).length ).toBe( 1 );
} );
} );
describe( 'First step is completed', () => {
let rendered;
beforeEach( () => {
wcSettings.pinterest_for_woocommerce.isBusinessConnected = true;
wcSettings.pinterest_for_woocommerce.isConnected = true;
rendered = render( <WizardApp query={ getQuery() } /> );
} );
test( 'should step 1 & 2 be clickable in the stepper', () => {
expect( rendered.queryAllByRole( 'button' ).length ).toBe( 2 );
expect(
rendered.getByRole( 'button', {
name: stepOne,
} )
).toBeInTheDocument();
expect(
rendered.getByRole( 'button', {
name: stepTwo,
} )
).toBeInTheDocument();
} );
} );
describe( 'Second step is completed', () => {
let rendered;
beforeEach( () => {
wcSettings.pinterest_for_woocommerce.isBusinessConnected = true;
wcSettings.pinterest_for_woocommerce.isConnected = true;
isDomainVerified.mockImplementation( () => true );
rendered = render( <WizardApp query={ getQuery() } /> );
} );
test( 'should 3 steps button be clickable in the stepper', () => {
expect( rendered.queryAllByRole( 'button' ).length ).toBe( 2 );
const setUpButton = rendered.getByRole( 'button', {
name: stepOne,
} );
const claimButton = rendered.getByRole( 'button', {
name: stepTwo,
} );
expect( setUpButton ).toBeInTheDocument();
expect( claimButton ).toBeInTheDocument();
} );
test( 'should event tracking be = setup-account after click', () => {
const setUpButton = rendered.getByRole( 'button', {
name: stepOne,
} );
fireEvent.click( setUpButton );
expect( recordEvent ).toHaveBeenCalledWith( 'pfw_setup', {
target: 'setup-account',
trigger: 'wizard-stepper',
} );
} );
test( 'should navigate to `step=setup-account`', () => {
expect( window.location ).toContainURLSearchParam(
'step',
'setup-account'
);
} );
} );
describe( 'Third step is completed', () => {
let rendered;
beforeEach( () => {
wcSettings.pinterest_for_woocommerce.isBusinessConnected = true;
wcSettings.pinterest_for_woocommerce.isConnected = true;
isDomainVerified.mockImplementation( () => true );
isTrackingConfigured.mockImplementation( () => true );
rendered = render( <WizardApp query={ getQuery() } /> );
} );
test( 'should all three steps be clickable buttons', () => {
expect( rendered.queryAllByRole( 'button' ).length ).toBe( 2 );
expect(
rendered.getByRole( 'button', {
name: stepOne,
exact: false,
} )
).toBeInTheDocument();
expect(
rendered.getByRole( 'button', {
name: stepTwo,
exact: false,
} )
).toBeInTheDocument();
} );
test( 'should event tracking be = claim-website after click', () => {
fireEvent.click(
rendered.getByRole( 'button', {
name: stepTwo,
} )
);
expect( recordEvent ).toHaveBeenCalledWith( 'pfw_setup', {
target: 'claim-website',
trigger: 'wizard-stepper',
} );
} );
test( 'should navigate to `step=claim-website', () => {
expect( window.location ).toContainURLSearchParam(
'step',
'claim-website'
);
} );
} );
} );