woocommerce/plugins/woocommerce-admin/client/homescreen/activity-panel/stock/test/index.js

65 lines
1.5 KiB
JavaScript
Raw Normal View History

Migrate Stock Panel to Homescreen (https://github.com/woocommerce/woocommerce-admin/pull/5729) * Refactor low stock variable to be the count instead of a boolean. * Add initial render of the Stock panel on the homescreen. * Move existing Stock panel to homescreen accordion. * Ensure int value for low stock product count. * Update ProductImage styling. * Update stock activity car styles. * Only show 5 low stock products. * Add "undo" action to the stock updated snackbar. * Fix check for explicit notice dismissal when taking actions. * Hide now-in-stock products after updating. By cllearing "edited" flag on successful update. * Fetch more products after updating stock. * Fix the number of product placeholders shown. * Only show products placeholders on the initial fetch. * Fix placeholder style. * Fetch low stock count dynamically. * Let initialOpen prop toggle Accordion panels if they haven't been toggled by the user. * Refactor item total count state. Allows for auto-updating item totals whenever identical queries (from a totals perspective) are issued. * Add last order date to low stock products API response. * Allow non-date strings in ActivityCard date prop. * Add last order date to stock panel cards. * Remove empty stock panel view. * Add test file for StockPanel. * Only request necessary fields from products endpoint. * Add test for products fetch after stock update. * Fix field name. * Add test for last order date in low stock products API response. * Stock panel should be initially closed. * Skip updating a product if the quantity is unchanged.
2020-11-25 18:51:15 +00:00
/**
* External dependencies
*/
import { render, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
/**
* Internal dependencies
*/
import { StockPanel } from '../';
describe( 'StockPanel', () => {
it( 'should the correct number of placeholders', () => {
const { container } = render(
<StockPanel
countLowStockProducts={ 3 }
isError={ false }
isRequesting={ true }
products={ [] }
/>
);
expect(
container.querySelectorAll(
'.woocommerce-stock-activity-card.is-loading'
)
).toHaveLength( 3 );
} );
it( 'should request more products when one is updated', async () => {
const createNotice = jest.fn();
const invalidateResolution = jest.fn();
const updateProductStock = jest.fn().mockResolvedValue( true );
Migrate Stock Panel to Homescreen (https://github.com/woocommerce/woocommerce-admin/pull/5729) * Refactor low stock variable to be the count instead of a boolean. * Add initial render of the Stock panel on the homescreen. * Move existing Stock panel to homescreen accordion. * Ensure int value for low stock product count. * Update ProductImage styling. * Update stock activity car styles. * Only show 5 low stock products. * Add "undo" action to the stock updated snackbar. * Fix check for explicit notice dismissal when taking actions. * Hide now-in-stock products after updating. By cllearing "edited" flag on successful update. * Fetch more products after updating stock. * Fix the number of product placeholders shown. * Only show products placeholders on the initial fetch. * Fix placeholder style. * Fetch low stock count dynamically. * Let initialOpen prop toggle Accordion panels if they haven't been toggled by the user. * Refactor item total count state. Allows for auto-updating item totals whenever identical queries (from a totals perspective) are issued. * Add last order date to low stock products API response. * Allow non-date strings in ActivityCard date prop. * Add last order date to stock panel cards. * Remove empty stock panel view. * Add test file for StockPanel. * Only request necessary fields from products endpoint. * Add test for products fetch after stock update. * Fix field name. * Add test for last order date in low stock products API response. * Stock panel should be initially closed. * Skip updating a product if the quantity is unchanged.
2020-11-25 18:51:15 +00:00
const { getByRole } = render(
<StockPanel
countLowStockProducts={ 1 }
isError={ false }
isRequesting={ false }
products={ [
{
id: 1,
name: 'Test Product',
low_stock_amount: 5,
stock_quantity: 1,
type: 'simple',
},
] }
invalidateResolution={ invalidateResolution }
updateProductStock={ updateProductStock }
createNotice={ createNotice }
/>
);
userEvent.click( getByRole( 'button', { name: 'Update stock' } ) );
// Number input gets "spinbutton", apparently.
userEvent.type( getByRole( 'spinbutton' ), '3' );
userEvent.click( getByRole( 'button', { name: 'Save' } ) );
await waitFor( () => {
expect( invalidateResolution ).toHaveBeenCalled();
} );
} );
} );