PluginProbe
Discount Rules for WooCommerce – Disco | Dynamic Pricing, Conditions, Bulk, Bundle, BOGO / 1.4.19
Discount Rules for WooCommerce – Disco | Dynamic Pricing, Conditions, Bulk, Bundle, BOGO v1.4.19
1.4.19 1.4.18 1.4.17 1.4.16 1.4.15 1.4.14 1.4.13 1.4.12 1.4.11 1.4.10 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.54 1.3.53 1.3.52 1.3.51 1.3.50 All 182 releases
disco / backend / views / components / Analytics / __tests__ / layout / AnalyticsBreadcrumb.test.jsx

AnalyticsBreadcrumb.test.jsx in Discount Rules for WooCommerce – Disco | Dynamic Pricing, Conditions, Bulk, Bundle, BOGO 1.4.19, at backend/views/components/Analytics/__tests__/layout/AnalyticsBreadcrumb.test.jsx

123 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import '@testing-library/jest-dom';
2 import { screen } from '@testing-library/react';
3 import AnalyticsBreadcrumb from '../../components/layout/AnalyticsBreadcrumb';
4 import { renderWithProviders } from '../setup/helpers';
5
6 jest.mock('../../features/customers/customersApi', () => ({
7 useGetCustomerQuery: jest.fn(),
8 }));
9 jest.mock('../../features/campaigns/campaignsApi', () => ({
10 useGetCampaignQuery: jest.fn(),
11 }));
12
13 const {
14 useGetCustomerQuery,
15 } = require('../../features/customers/customersApi');
16 const {
17 useGetCampaignQuery,
18 } = require('../../features/campaigns/campaignsApi');
19
20 const NAV_ITEMS = [
21 { label: 'Dashboard', path: '/', end: true },
22 { label: 'Campaigns Report', path: '/campaigns-reports' },
23 { label: 'Products', path: '/products' },
24 { label: 'Orders', path: '/orders' },
25 { label: 'Customers', path: '/customers' },
26 ];
27
28 function renderBreadcrumb(pathname) {
29 return renderWithProviders(
30 <AnalyticsBreadcrumb pathname={pathname} NAV_ITEMS={NAV_ITEMS} />,
31 { route: pathname }
32 );
33 }
34
35 describe('AnalyticsBreadcrumb', () => {
36 beforeEach(() => {
37 useGetCustomerQuery.mockReturnValue({ data: undefined });
38 useGetCampaignQuery.mockReturnValue({ data: undefined });
39 });
40
41 afterEach(() => {
42 jest.clearAllMocks();
43 });
44
45 it('renders nothing on the dashboard route', () => {
46 const { container } = renderBreadcrumb('/');
47 expect(container.innerHTML).toBe('');
48 });
49
50 it('renders Dashboard > Campaigns Report for campaigns route', () => {
51 renderBreadcrumb('/campaigns-reports');
52
53 expect(screen.getByText('Dashboard')).toBeInTheDocument();
54 expect(screen.getByText('Campaigns Report')).toBeInTheDocument();
55 });
56
57 it('renders Dashboard > Products for products route', () => {
58 renderBreadcrumb('/products');
59
60 expect(screen.getByText('Dashboard')).toBeInTheDocument();
61 expect(screen.getByText('Products')).toBeInTheDocument();
62 });
63
64 it('renders Dashboard > Orders for orders route', () => {
65 renderBreadcrumb('/orders');
66
67 expect(screen.getByText('Dashboard')).toBeInTheDocument();
68 expect(screen.getByText('Orders')).toBeInTheDocument();
69 });
70
71 it('renders Dashboard > Customers for customers route', () => {
72 renderBreadcrumb('/customers');
73
74 expect(screen.getByText('Dashboard')).toBeInTheDocument();
75 expect(screen.getByText('Customers')).toBeInTheDocument();
76 });
77
78 it('falls back to "Campaign Details" while campaign data is loading', () => {
79 renderBreadcrumb('/campaigns-reports/42');
80
81 expect(screen.getByText('Dashboard')).toBeInTheDocument();
82 expect(screen.getByText('Campaigns Report')).toBeInTheDocument();
83 // expect(screen.getByText('Campaign Details')).toBeInTheDocument();
84 });
85
86 it('renders the campaign name dynamically for campaign details', () => {
87 useGetCampaignQuery.mockReturnValue({
88 data: { campaign_name: 'Summer Sale' },
89 });
90 renderBreadcrumb('/campaigns-reports/42');
91
92 expect(screen.getByText('Campaigns Report')).toBeInTheDocument();
93 expect(screen.getByText('Summer Sale')).toBeInTheDocument();
94 // expect(screen.queryByText('Campaign Details')).not.toBeInTheDocument();
95 });
96
97 it('falls back to "Customer Details" while customer data is loading', () => {
98 renderBreadcrumb('/customers/7');
99
100 expect(screen.getByText('Dashboard')).toBeInTheDocument();
101 expect(screen.getByText('Customers')).toBeInTheDocument();
102 // expect(screen.getByText('Customer Details')).toBeInTheDocument();
103 });
104
105 it('renders the customer name dynamically for customer details', () => {
106 useGetCustomerQuery.mockReturnValue({
107 data: { data: { name: 'Jane Smith' } },
108 });
109 renderBreadcrumb('/customers/7');
110
111 expect(screen.getByText('Customers')).toBeInTheDocument();
112 expect(screen.getByText('Jane Smith')).toBeInTheDocument();
113 expect(screen.queryByText('Customer Details')).not.toBeInTheDocument();
114 });
115
116 it('Dashboard link points to root', () => {
117 renderBreadcrumb('/products');
118
119 const dashboardLink = screen.getByText('Dashboard').closest('a');
120 expect(dashboardLink).toHaveAttribute('href', '/');
121 });
122 });
123