woocommerce/plugins/woocommerce-blocks/tests/utils/taxes.ts

94 lines
2.3 KiB
TypeScript
Raw Normal View History

Critical flow: Can see correct tax (https://github.com/woocommerce/woocommerce-blocks/pull/5900) * Tax is displayed correctly e2e test * Add extra utils to shopper * add single e2e test script oin package.json * Feedback changes from Niels * Test tax is correct on summary page * Check if CI test passes * Longer timeout for tax test * change timeout in jest config * increate jest timeout * Test * Test * Test * setTimeout outside of tests to 120000 * Address raluca's feedback and timeout everywheregaa * Increase timeout on for search box * set jest timeout to 120000 * Raluca's suggestions * Debug * Increase search timeout to 5000 * Only run Tax e2e tests in CI for quicker debug - REMOVE THIS * use waitforSelector * 30s delay for toMatchElement * Let'shope this works * Remove toMatchElement * waitForSelector * Run debug test only * Debug tax test * debug taxes * shopper using toMatchElement again * Remove the 30000 timeout delay from toMatchElement * Run all tests but only once * Remove tax test * Revert "Remove tax test" This reverts commit 7db34120e1e91f4fd26514fdb9525cac2a6066bb. * Delete the minicart test * Revert "Revert "Remove tax test"" This reverts commit 31dd654e52f37fcd02ccd25336958248bef495c6. * Revert "Delete the minicart test" This reverts commit 5595f0834a975d097a300bc0c7cbf643caa8b764. * tax test * block addToCart * Put back block functions * Refactor block.addToCart * mini-cart e2e test uses shopper.block.emptyCart() * only run shopper tests in CI * Run frontend and shopper tests and change waitFor -> waitForTimeout * Run frontend tests in CI * Run CI e2e tests again * Skip legacy template blocks * Skip legacy template test but run all others * Switch to storefront instead of twentytwentyone after legacy-template-blocks tests finish * Tidy up * fix typo * Fix ESLint issue Co-authored-by: Saad Tarhi <saad.trh@gmail.com> Co-authored-by: Saad Tarhi <saad.tarhi@automattic.com>
2022-03-08 14:50:16 +00:00
/**
* External dependencies
*/
import { withRestApi } from '@woocommerce/e2e-utils';
import type { TaxRate, ProductResponseItem } from '@woocommerce/types';
export async function showTaxes( onoff: boolean ): Promise< void > {
await withRestApi.updateSettingOption(
'general',
'woocommerce_calc_taxes',
{ value: onoff ? 'yes' : 'no' }
);
}
export function getExpectedTaxes(
taxRates: Array< TaxRate >,
countryCode: string,
products: Array< Partial< ProductResponseItem > > = []
): Array< { label: string; value: string } > {
const taxRatesForCountry = taxRates.filter(
( taxRate ) => taxRate.country === countryCode
);
const total = products.reduce(
( previous, current ) =>
parseFloat( previous.regular_price ) +
parseFloat( current.regular_price ),
{ regular_price: 0 }
);
return taxRatesForCountry.map( ( taxRate ) => {
const taxCalc = (
parseFloat( total ) *
( parseFloat( taxRate.rate ) / 100 )
).toFixed( 2 );
return { label: taxRate.name, value: `$${ taxCalc }` };
} );
}
export async function getTaxesFromCurrentPage(): Promise<
Array< {
label: string;
value: string;
} >
> {
return await page.$$eval(
'.wc-block-components-totals-taxes .wc-block-components-totals-item',
( nodes ) =>
nodes.map( ( node ) => {
const label = node.querySelector(
'.wc-block-components-totals-item__label'
)?.innerHTML;
const value = node.querySelector(
'.wc-block-components-totals-item__value'
)?.innerHTML;
return { label, value };
} )
);
}
export async function getTaxesFromOrderSummaryPage(
taxRates: TaxRate
): Promise<
Array< {
label: string;
value: string;
} >
> {
return await page.evaluate( ( taxRatesEval ) => {
return Array.from(
document.querySelectorAll(
'.woocommerce-table--order-details > tfoot > tr'
)
)
.filter( ( node ) => {
const taxLabel = node.getElementsByTagName( 'th' )[ 0 ]
.innerHTML;
return taxRatesEval.some(
// We need to remove the ":" on the end of the string before we compare
( taxRate ) => taxRate.name === taxLabel.slice( 0, -1 )
);
} )
.map( ( node ) => {
const label = node.getElementsByTagName( 'th' )[ 0 ].innerHTML;
const value = node.getElementsByTagName( 'td' )[ 0 ].innerText;
return {
label: label.slice( 0, -1 ),
value,
};
} );
}, taxRates );
}