woocommerce/plugins/woocommerce-admin/client/store-management-links/test/index.js

136 lines
3.3 KiB
JavaScript
Raw Normal View History

jest.mock( '@woocommerce/tracks', () => ( {
...jest.requireActual( '@woocommerce/tracks' ),
recordEvent: jest.fn(),
} ) );
jest.mock( '@woocommerce/settings', () => ( {
...jest.requireActual( '@woocommerce/settings' ),
getSetting: jest.fn( () => 'https://fake-site-url.com' ),
} ) );
/**
* External dependencies
*/
import { recordEvent } from '@woocommerce/tracks';
import { render } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
Allow packages to be built in isolation. (https://github.com/woocommerce/woocommerce-admin/pull/7286) * Use yarn instead of npm. In prep for workspaces, since we're locked to npm < 7. See: https://github.com/woocommerce/woocommerce-admin/pull/7126#issue-661287749 * Initial workspace creation. * Add initial tsc build to @woocommerce/number. * Attempt to build experimental package. * Try currency package. * Define all packages as workspaces. * Use tsconfig common to packages. * Fix currency package build. * Build csv-export with tsc. * Try to build customer-effort-score with tsc. * Fix JSX pragma. * Build data package with tsc. * Build date package with tsc. * Build experimental package with tsc. * Try to build explat package with tsc. * Build navigation package with tsc. * Build notices package with tsc. * Build onboarding package with tsc. * Build components package with tsc. * Swap in package JS build into main script. * Fix experimental package build. * Try per-package css build with components. * Try to run components package tests in isolation. Broken on JSX in test files not being transformed. * Move @woocommerce/wc-admin-settings into a package. * Try to fix components package tests. Fails because we aren't setting up the jest/jest-dom globals. * Move JS test code to reusable (private) package. * Enable incremental TS builds. * Use workspaces to run JS tests. * Use new jest configs for update snapshot scripts. * Fix style builds. * Fix package version in components. * Fix client test debug and watch scripts. * Update yarn lock. * Update test-staged behavior. * Try to fix storybook. * Fix storybook. * Update more npm commands to yarn. * Add changelog. * Fix lint errors. * Update packages readme script references. * Clean up unused gitignore match. * Fix another npm command. * Fix JS builds on watch. * Fix start script. * Fix start scripts for packages. * Use tsc to build packages before tests * yarn -> npm. # Conflicts: # package-lock.json # package.json * Fix linter error. * Remove workspace definitions. * Fix missing Fragment import. * Fix package lock. * Fix missing reference. * Only build commonjs module for js-tests helper. * Remove errant dependency from components. * Remove noop scripts. * Fix package JS build before testing. * Revert noisy formatting changes. * Fix precommit and test scripts. * Fix minimum expected recommended extension count. Japan test case breaks this. * Revert babel config changes. * chore(release): publish - @woocommerce/components@7.2.0 - @woocommerce/csv-export@1.4.0 - @woocommerce/currency@3.2.0 - @woocommerce/customer-effort-score@1.1.0 - @woocommerce/data@1.4.0 - @woocommerce/date@3.1.0 - @woocommerce/dependency-extraction-webpack-plugin@1.7.0 - @woocommerce/eslint-plugin@1.3.0 - @woocommerce/experimental@1.5.0 - @woocommerce/explat@1.1.0 - @woocommerce/js-tests@1.1.0 - @woocommerce/navigation@6.1.0 - @woocommerce/notices@3.1.0 - @woocommerce/number@2.2.0 - @woocommerce/onboarding@1.1.0 - @woocommerce/tracks@1.1.0 - @woocommerce/wc-admin-settings@1.1.0 * Add script for running 'start' in a package. * Remove yarn from gitignore. * Update package changelogs, prep versions for release. * Try to fix E2E tests after main merge. * Some cleanup. * Add changelog. Co-authored-by: Paul Sealock <psealock@gmail.com>
2021-07-14 20:38:57 +00:00
import { createElement } from '@wordpress/element';
/**
* Internal dependencies
*/
import {
StoreManagementLinks,
getLinkTypeAndHref,
getItemsByCategory,
generateExtensionLinks,
} from '..';
describe( 'getLinkTypeAndHref', () => {
it( 'generates the correct link for wc-admin links', () => {
const result = getLinkTypeAndHref( {
type: 'wc-admin',
path: 'foo/bar',
} );
expect( result.linkType ).toEqual( 'wc-admin' );
expect( result.href ).toEqual(
'admin.php?page=wc-admin&path=%2Ffoo/bar'
);
} );
it( 'generates the correct link for wp-admin links', () => {
const result = getLinkTypeAndHref( {
type: 'wp-admin',
path: '/foo/bar',
} );
expect( result.linkType ).toEqual( 'wp-admin' );
expect( result.href ).toEqual( '/foo/bar' );
} );
it( 'generates the correct link for wc-settings links', () => {
const result = getLinkTypeAndHref( {
type: 'wc-settings',
tab: 'foo',
} );
expect( result.linkType ).toEqual( 'wp-admin' );
expect( result.href ).toEqual( 'admin.php?page=wc-settings&tab=foo' );
} );
it( 'generates the an external link if there is no provided type', () => {
const result = getLinkTypeAndHref( {
href: 'http://example.com',
} );
expect( result.linkType ).toEqual( 'external' );
expect( result.href ).toEqual( 'http://example.com' );
} );
} );
describe( 'StoreManagementLinks', () => {
it( 'records a track when a link is clicked', () => {
const { queryByText } = render( <StoreManagementLinks /> );
const linkDetails = getItemsByCategory( 'fakeUrl' )[ 0 ].items[ 0 ];
userEvent.click( queryByText( linkDetails.title ) );
expect( recordEvent ).toHaveBeenCalledWith( 'home_quick_links_click', {
task_name: linkDetails.listItemTag,
} );
} );
} );
describe( 'generateExtensionLinks', () => {
it( 'filters out external links', () => {
expect(
generateExtensionLinks( [
{
href: 'https://example.com',
title: 'external link',
icon: <div>hi</div>,
},
] )
).toEqual( [] );
} );
it( 'generates a valid link for relative links', () => {
const validFullUrl = {
href: 'http://localhost/foo/bar',
title: 'external link',
icon: <div>hi</div>,
};
const validRelativeUrl = {
href: '/foo/bar',
title: 'external link',
icon: <div>hi</div>,
};
expect( generateExtensionLinks( [ validFullUrl ] ) ).toEqual( [
{
icon: validFullUrl.icon,
link: {
href: validFullUrl.href,
linkType: 'wp-admin',
},
title: validFullUrl.title,
listItemTag: 'quick-links-extension-link',
},
] );
expect( generateExtensionLinks( [ validRelativeUrl ] ) ).toEqual( [
{
icon: validRelativeUrl.icon,
link: {
href: validRelativeUrl.href,
linkType: 'wp-admin',
},
title: validRelativeUrl.title,
listItemTag: 'quick-links-extension-link',
},
] );
} );
} );