Commit 00ff1cf0b72 for woocommerce
commit 00ff1cf0b72cc3a1698424959ea416743a2e1647
Author: Albert Juhé Lluveras <contact@albertjuhe.com>
Date: Fri Aug 7 14:17:43 2026 +0200
Harden Reviews blocks tests (#67445)
* Harden Reviews blocks tests
* Add changelog
* Avoid rating collision with Cap reviews
* Fix changelog type
diff --git a/plugins/woocommerce/changelog/fix-67434-harden-reviews-blocks-tests b/plugins/woocommerce/changelog/fix-67434-harden-reviews-blocks-tests
new file mode 100644
index 00000000000..3cb6e48ce3c
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-67434-harden-reviews-blocks-tests
@@ -0,0 +1,5 @@
+Significance: patch
+Type: dev
+Comment: Harden Reviews blocks tests
+
+
diff --git a/plugins/woocommerce/tests/e2e/bin/blocks/scripts/parallel/reviews.sh b/plugins/woocommerce/tests/e2e/bin/blocks/scripts/parallel/reviews.sh
index 96b0a034b3b..2d978310899 100644
--- a/plugins/woocommerce/tests/e2e/bin/blocks/scripts/parallel/reviews.sh
+++ b/plugins/woocommerce/tests/e2e/bin/blocks/scripts/parallel/reviews.sh
@@ -1,7 +1,9 @@
#!/usr/bin/env bash
-# Add a couple of reviews to Hoodie.
+# Add reviews to Hoodie. Order matters: specs treat the last created review as most recent.
+# Include three distinct ratings so latest / highest / lowest are different reviews.
hoodie_post_id=$(wp post list --post_type=product --field=ID --name="Hoodie" --format=ids)
+wp wc product_review create $hoodie_post_id --name="Jane Smith" --email="customer@woocommerceblockse2etestsuite.com" --review="It's ok." --rating=3 --user=1
wp wc product_review create $hoodie_post_id --name="Jane Smith" --email="customer@woocommerceblockse2etestsuite.com" --review="Nice album!" --rating=5 --user=1
wp wc product_review create $hoodie_post_id --name="Jane Smith" --email="customer@woocommerceblockse2etestsuite.com" --review="Not bad." --rating=4 --user=1
diff --git a/plugins/woocommerce/tests/e2e/test-data/blocks/data/data.ts b/plugins/woocommerce/tests/e2e/test-data/blocks/data/data.ts
index 88eb100d53c..9eb63998141 100644
--- a/plugins/woocommerce/tests/e2e/test-data/blocks/data/data.ts
+++ b/plugins/woocommerce/tests/e2e/test-data/blocks/data/data.ts
@@ -60,7 +60,14 @@ const customer = {
// Reviews are ordered by when they were created.
// source: plugins/woocommerce/tests/e2e/bin/blocks/scripts/parallel/reviews.sh
+// Three distinct ratings so latest / highest / lowest are different reviews.
const hoodieReviews = [
+ {
+ name: `${ customer.first_name } ${ customer.last_name }`,
+ email: customer.email,
+ review: "It's ok.",
+ rating: 3,
+ },
{
name: `${ customer.first_name } ${ customer.last_name }`,
email: customer.email,
diff --git a/plugins/woocommerce/tests/e2e/tests/blocks/reviews-by-category/reviews-by-category.block_theme.spec.ts b/plugins/woocommerce/tests/e2e/tests/blocks/reviews-by-category/reviews-by-category.block_theme.spec.ts
index 8f389a700d9..addfe575572 100644
--- a/plugins/woocommerce/tests/e2e/tests/blocks/reviews-by-category/reviews-by-category.block_theme.spec.ts
+++ b/plugins/woocommerce/tests/e2e/tests/blocks/reviews-by-category/reviews-by-category.block_theme.spec.ts
@@ -21,73 +21,92 @@ const lowestRating = [ ...hoodieReviews ].sort(
const BLOCK_NAME = 'woocommerce/reviews-by-category';
test.describe( `${ BLOCK_NAME } Block`, () => {
- test.beforeEach( async ( { admin, editor } ) => {
- await admin.createNewPost();
- await editor.insertBlock( { name: BLOCK_NAME } );
+ test.describe( 'with a category selected', () => {
+ test.beforeEach( async ( { admin, editor } ) => {
+ await admin.createNewPost();
+ await editor.insertBlock( { name: BLOCK_NAME } );
+
+ const blockLocator = await editor.getBlockByName( BLOCK_NAME );
+ const categoryCheckbox = blockLocator.getByRole( 'checkbox', {
+ name: 'Clothing',
+ exact: true,
+ } );
+ await categoryCheckbox.check();
+ await expect( categoryCheckbox ).toBeChecked();
+
+ await blockLocator.getByRole( 'button', { name: 'Done' } ).click();
+ } );
+
+ test( 'block can be inserted and it successfully renders a review in the editor and the frontend', async ( {
+ page,
+ editor,
+ } ) => {
+ await expect(
+ editor.canvas.getByText( hoodieReviews[ 0 ].review )
+ ).toBeVisible();
- const blockLocator = await editor.getBlockByName( BLOCK_NAME );
- const categoryCheckbox = blockLocator.getByRole( 'checkbox', {
- name: 'Clothing',
- exact: true,
+ await editor.publishAndVisitPost();
+
+ await expect(
+ page.getByText( hoodieReviews[ 0 ].review )
+ ).toBeVisible();
} );
- await categoryCheckbox.check();
- await expect( categoryCheckbox ).toBeChecked();
- await blockLocator.getByRole( 'button', { name: 'Done' } ).click();
- } );
+ test( 'sorts by most recent review by default and can sort by highest rating', async ( {
+ page,
+ frontendUtils,
+ editor,
+ } ) => {
+ await editor.publishAndVisitPost();
- test( 'block can be inserted and it successfully renders a review in the editor and the frontend', async ( {
- page,
- editor,
- } ) => {
- await expect(
- editor.canvas.getByText( hoodieReviews[ 0 ].review )
- ).toBeVisible();
+ const block = await frontendUtils.getBlockByName( BLOCK_NAME );
- await editor.publishAndVisitPost();
+ const reviews = block.locator(
+ '.wc-block-components-review-list-item__text'
+ );
- await expect(
- page.getByText( hoodieReviews[ 0 ].review )
- ).toBeVisible();
- } );
+ await expect( reviews.first() ).toHaveText( latestReview.review );
- test( 'sorts by most recent review by default and can sort by highest rating', async ( {
- page,
- frontendUtils,
- editor,
- } ) => {
- await editor.publishAndVisitPost();
+ const select = page.getByLabel( 'Order by' );
+ await select.selectOption( 'Highest rating' );
- const block = await frontendUtils.getBlockByName( BLOCK_NAME );
+ await expect( reviews.first() ).toHaveText( highestRating.review );
+ } );
+
+ test( 'can sort by lowest rating', async ( {
+ page,
+ frontendUtils,
+ editor,
+ } ) => {
+ await editor.publishAndVisitPost();
- const reviews = block.locator(
- '.wc-block-components-review-list-item__text'
- );
+ const block = await frontendUtils.getBlockByName( BLOCK_NAME );
- await expect( reviews.first() ).toHaveText( latestReview.review );
+ const reviews = block.locator(
+ '.wc-block-components-review-list-item__text'
+ );
- const select = page.getByLabel( 'Order by' );
- await select.selectOption( 'Highest rating' );
+ await expect( reviews.first() ).toHaveText( latestReview.review );
- await expect( reviews.first() ).toHaveText( highestRating.review );
+ const select = page.getByLabel( 'Order by' );
+ await select.selectOption( 'Lowest rating' );
+
+ await expect( reviews.first() ).toHaveText( lowestRating.review );
+ } );
} );
- test( 'can sort by lowest rating', async ( {
- page,
- frontendUtils,
+ test( 'renders no reviews on the frontend when published without a category selected', async ( {
+ admin,
editor,
+ frontendUtils,
} ) => {
+ await admin.createNewPost();
+ await editor.insertBlock( { name: BLOCK_NAME } );
await editor.publishAndVisitPost();
const block = await frontendUtils.getBlockByName( BLOCK_NAME );
-
- const reviews = block.locator(
- '.wc-block-components-review-list-item__text'
- );
-
- const select = page.getByLabel( 'Order by' );
- await select.selectOption( 'Lowest rating' );
-
- await expect( reviews.first() ).toHaveText( lowestRating.review );
+ await expect(
+ block.locator( '.wc-block-components-review-list-item__text' )
+ ).toHaveCount( 0 );
} );
} );
diff --git a/plugins/woocommerce/tests/e2e/tests/blocks/reviews-by-product/reviews-by-product.block_theme.spec.ts b/plugins/woocommerce/tests/e2e/tests/blocks/reviews-by-product/reviews-by-product.block_theme.spec.ts
index fe9a6b7d82d..bf155726a36 100644
--- a/plugins/woocommerce/tests/e2e/tests/blocks/reviews-by-product/reviews-by-product.block_theme.spec.ts
+++ b/plugins/woocommerce/tests/e2e/tests/blocks/reviews-by-product/reviews-by-product.block_theme.spec.ts
@@ -21,71 +21,88 @@ const lowestRating = [ ...hoodieReviews ].sort(
)[ 0 ];
test.describe( `${ BLOCK_NAME } Block`, () => {
- test.beforeEach( async ( { admin, editor } ) => {
- await admin.createNewPost();
- await editor.insertBlock( { name: BLOCK_NAME } );
-
- const productCheckbox = editor.canvas.getByLabel(
- 'Hoodie, has 2 reviews'
- );
- await productCheckbox.check();
- await expect( productCheckbox ).toBeChecked();
-
- await editor.canvas.getByRole( 'button', { name: 'Done' } ).click();
+ test.describe( 'with a product selected', () => {
+ test.beforeEach( async ( { admin, editor } ) => {
+ await admin.createNewPost();
+ await editor.insertBlock( { name: BLOCK_NAME } );
+
+ const productCheckbox = editor.canvas.getByLabel(
+ 'Hoodie, has 3 reviews'
+ );
+ await productCheckbox.check();
+ await expect( productCheckbox ).toBeChecked();
+
+ await editor.canvas.getByRole( 'button', { name: 'Done' } ).click();
+ } );
+
+ test( 'block can be inserted and it successfully renders a review in the editor and the frontend', async ( {
+ page,
+ editor,
+ } ) => {
+ await expect(
+ editor.canvas.getByText( hoodieReviews[ 0 ].review )
+ ).toBeVisible();
+
+ await editor.publishAndVisitPost();
+
+ await expect(
+ page.getByText( hoodieReviews[ 0 ].review )
+ ).toBeVisible();
+ } );
+
+ test( 'sorts by most recent by default and can sort by highest rating', async ( {
+ page,
+ frontendUtils,
+ editor,
+ } ) => {
+ await editor.publishAndVisitPost();
+ const block = await frontendUtils.getBlockByName( BLOCK_NAME );
+
+ const reviews = block.locator(
+ '.wc-block-components-review-list-item__text'
+ );
+
+ await expect( reviews.first() ).toHaveText( latestReview.review );
+
+ const select = page.getByLabel( 'Order by' );
+ await select.selectOption( 'Highest rating' );
+
+ await expect( reviews.first() ).toHaveText( highestRating.review );
+ } );
+
+ test( 'can sort by lowest rating', async ( {
+ page,
+ frontendUtils,
+ editor,
+ } ) => {
+ await editor.publishAndVisitPost();
+ const block = await frontendUtils.getBlockByName( BLOCK_NAME );
+
+ const reviews = block.locator(
+ '.wc-block-components-review-list-item__text'
+ );
+
+ await expect( reviews.first() ).toHaveText( latestReview.review );
+
+ const select = page.getByLabel( 'Order by' );
+ await select.selectOption( 'Lowest rating' );
+
+ await expect( reviews.first() ).toHaveText( lowestRating.review );
+ } );
} );
- test( 'block can be inserted and it successfully renders a review in the editor and the frontend', async ( {
- page,
+ test( 'renders no reviews on the frontend when published without a product selected', async ( {
+ admin,
editor,
- } ) => {
- await expect(
- editor.canvas.getByText( hoodieReviews[ 0 ].review )
- ).toBeVisible();
-
- await editor.publishAndVisitPost();
-
- await expect(
- page.getByText( hoodieReviews[ 0 ].review )
- ).toBeVisible();
- } );
-
- test( 'sorts by most recent by default and can sort by highest rating', async ( {
- page,
frontendUtils,
- editor,
} ) => {
+ await admin.createNewPost();
+ await editor.insertBlock( { name: BLOCK_NAME } );
await editor.publishAndVisitPost();
- const block = await frontendUtils.getBlockByName( BLOCK_NAME );
-
- const reviews = block.locator(
- '.wc-block-components-review-list-item__text'
- );
-
- await expect( reviews.first() ).toHaveText( latestReview.review );
-
- const select = page.getByLabel( 'Order by' );
- await select.selectOption( 'Highest rating' );
- await expect( reviews.first() ).toHaveText( highestRating.review );
- } );
-
- test( 'can sort by lowest rating', async ( {
- page,
- frontendUtils,
- editor,
- } ) => {
- await editor.publishAndVisitPost();
const block = await frontendUtils.getBlockByName( BLOCK_NAME );
-
- const reviews = block.locator(
- '.wc-block-components-review-list-item__text'
- );
-
- await expect( reviews.first() ).toHaveText( latestReview.review );
-
- const select = page.getByLabel( 'Order by' );
- await select.selectOption( 'Lowest rating' );
-
- await expect( reviews.first() ).toHaveText( lowestRating.review );
+ await expect(
+ block.locator( '.wc-block-components-review-list-item__text' )
+ ).toHaveCount( 0 );
} );
} );