Hide reviews in the frontend when they are disabled at store or product level (#50979)
* Not show reviews in the frontend when they are disabled at store or product level * Add tests for single product template * Add changefile(s) from automation for the following project(s): woocommerce-blocks, woocommerce * Add changefile(s) from automation for the following project(s): woocommerce-blocks, woocommerce * Fix typo --------- Co-authored-by: github-actions <github-actions@github.com>
This commit is contained in:
parent
eb868090b1
commit
1d21197f77
|
@ -0,0 +1,101 @@
|
||||||
|
/**
|
||||||
|
* External dependencies
|
||||||
|
*/
|
||||||
|
import { Editor, test as base, expect } from '@woocommerce/e2e-utils';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal dependencies
|
||||||
|
*/
|
||||||
|
|
||||||
|
const blockData = {
|
||||||
|
name: 'Single Product',
|
||||||
|
slug: 'woocommerce/single-product',
|
||||||
|
product: 'Hoodie',
|
||||||
|
productSlug: 'hoodie',
|
||||||
|
};
|
||||||
|
|
||||||
|
class BlockUtils {
|
||||||
|
editor: Editor;
|
||||||
|
admin;
|
||||||
|
|
||||||
|
constructor( { editor, admin }: { editor: Editor; admin } ) {
|
||||||
|
this.editor = editor;
|
||||||
|
this.admin = admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
async configureSingleProductBlockForProduct( product: string ) {
|
||||||
|
const singleProductBlock = await this.editor.getBlockByName(
|
||||||
|
'woocommerce/single-product'
|
||||||
|
);
|
||||||
|
|
||||||
|
await singleProductBlock
|
||||||
|
.locator( `input[type="radio"][value="${ product }"]` )
|
||||||
|
.nth( 0 )
|
||||||
|
.click();
|
||||||
|
|
||||||
|
await singleProductBlock.getByText( 'Done' ).click();
|
||||||
|
}
|
||||||
|
|
||||||
|
async insertBlockAndVisit( block: string, product: string ) {
|
||||||
|
await this.admin.createNewPost();
|
||||||
|
await this.editor.insertBlock( { name: block } );
|
||||||
|
await this.configureSingleProductBlockForProduct( product );
|
||||||
|
await this.editor.publishAndVisitPost();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const test = base.extend< { blockUtils: BlockUtils } >( {
|
||||||
|
blockUtils: async ( { editor, admin }, use ) => {
|
||||||
|
await use( new BlockUtils( { editor, admin } ) );
|
||||||
|
},
|
||||||
|
} );
|
||||||
|
|
||||||
|
test.describe( `${ blockData.slug } Block`, () => {
|
||||||
|
test( 'Product Rating block is not visible if ratings are disabled for product', async ( {
|
||||||
|
admin,
|
||||||
|
page,
|
||||||
|
} ) => {
|
||||||
|
await test.step( `Disable reviews for ${ blockData.productSlug }`, async () => {
|
||||||
|
await page.goto( `/products/${ blockData.productSlug }` );
|
||||||
|
await page.click( 'text=Edit product' );
|
||||||
|
await page.getByRole( 'link', { name: 'Inventory' } ).click();
|
||||||
|
await page.getByRole( 'link', { name: 'Advanced' } ).click();
|
||||||
|
await page.waitForSelector( 'text=Enable reviews' );
|
||||||
|
await admin.page
|
||||||
|
.getByRole( 'checkbox', {
|
||||||
|
name: 'Enable reviews',
|
||||||
|
} )
|
||||||
|
.uncheck();
|
||||||
|
await page.getByRole( 'button', { name: 'Update' } ).click();
|
||||||
|
} );
|
||||||
|
|
||||||
|
await page.goto( '/product/hoodie/' );
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
page.locator( '.wc-block-components-product-rating' )
|
||||||
|
).not.toBeVisible();
|
||||||
|
} );
|
||||||
|
|
||||||
|
test( 'Product Rating block is not visible if ratings are disabled globally in the store', async ( {
|
||||||
|
admin,
|
||||||
|
page,
|
||||||
|
} ) => {
|
||||||
|
await test.step( `Disable reviews in the store`, async () => {
|
||||||
|
await page.goto(
|
||||||
|
'/wp-admin/admin.php?page=wc-settings&tab=products'
|
||||||
|
);
|
||||||
|
await admin.page
|
||||||
|
.getByRole( 'checkbox', {
|
||||||
|
name: 'Enable product reviews',
|
||||||
|
} )
|
||||||
|
.uncheck();
|
||||||
|
await page.getByRole( 'button', { name: 'Save changes' } ).click();
|
||||||
|
} );
|
||||||
|
|
||||||
|
await page.goto( '/product/hoodie/' );
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
page.locator( '.wc-block-components-product-rating' )
|
||||||
|
).not.toBeVisible();
|
||||||
|
} );
|
||||||
|
} );
|
|
@ -0,0 +1,113 @@
|
||||||
|
/**
|
||||||
|
* External dependencies
|
||||||
|
*/
|
||||||
|
import { Editor, test as base, expect } from '@woocommerce/e2e-utils';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal dependencies
|
||||||
|
*/
|
||||||
|
|
||||||
|
const blockData = {
|
||||||
|
name: 'Single Product',
|
||||||
|
slug: 'woocommerce/single-product',
|
||||||
|
product: 'Hoodie',
|
||||||
|
productSlug: 'hoodie',
|
||||||
|
};
|
||||||
|
|
||||||
|
class BlockUtils {
|
||||||
|
editor: Editor;
|
||||||
|
admin;
|
||||||
|
|
||||||
|
constructor( { editor, admin }: { editor: Editor; admin } ) {
|
||||||
|
this.editor = editor;
|
||||||
|
this.admin = admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
async configureSingleProductBlockForProduct( product: string ) {
|
||||||
|
const singleProductBlock = await this.editor.getBlockByName(
|
||||||
|
'woocommerce/single-product'
|
||||||
|
);
|
||||||
|
|
||||||
|
await singleProductBlock
|
||||||
|
.locator( `input[type="radio"][value="${ product }"]` )
|
||||||
|
.nth( 0 )
|
||||||
|
.click();
|
||||||
|
|
||||||
|
await singleProductBlock.getByText( 'Done' ).click();
|
||||||
|
}
|
||||||
|
|
||||||
|
async insertBlockAndVisit( block: string, product: string ) {
|
||||||
|
await this.admin.createNewPost();
|
||||||
|
await this.editor.insertBlock( { name: block } );
|
||||||
|
await this.configureSingleProductBlockForProduct( product );
|
||||||
|
await this.editor.publishAndVisitPost();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const test = base.extend< { blockUtils: BlockUtils } >( {
|
||||||
|
blockUtils: async ( { editor, admin }, use ) => {
|
||||||
|
await use( new BlockUtils( { editor, admin } ) );
|
||||||
|
},
|
||||||
|
} );
|
||||||
|
|
||||||
|
test.describe( `${ blockData.slug } Block`, () => {
|
||||||
|
test( 'Product Rating block is not visible if ratings are disabled for product', async ( {
|
||||||
|
admin,
|
||||||
|
page,
|
||||||
|
blockUtils,
|
||||||
|
} ) => {
|
||||||
|
await test.step( `Disable reviews for ${ blockData.productSlug }`, async () => {
|
||||||
|
await page.goto( `/products/${ blockData.productSlug }` );
|
||||||
|
await page.click( 'text=Edit product' );
|
||||||
|
await page.getByRole( 'link', { name: 'Inventory' } ).click();
|
||||||
|
await page.getByRole( 'link', { name: 'Advanced' } ).click();
|
||||||
|
await page.waitForSelector( 'text=Enable reviews' );
|
||||||
|
await admin.page
|
||||||
|
.getByRole( 'checkbox', {
|
||||||
|
name: 'Enable reviews',
|
||||||
|
} )
|
||||||
|
.uncheck();
|
||||||
|
await page.getByRole( 'button', { name: 'Update' } ).click();
|
||||||
|
} );
|
||||||
|
|
||||||
|
await test.step( `Insert the block in a post and visit it`, async () => {
|
||||||
|
await blockUtils.insertBlockAndVisit(
|
||||||
|
blockData.slug,
|
||||||
|
blockData.productSlug
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
page.locator( '.wc-block-components-product-rating' )
|
||||||
|
).not.toBeVisible();
|
||||||
|
} );
|
||||||
|
|
||||||
|
test( 'Product Rating block is not visible if ratings are disabled globally in the store', async ( {
|
||||||
|
admin,
|
||||||
|
page,
|
||||||
|
blockUtils,
|
||||||
|
} ) => {
|
||||||
|
await test.step( `Disable reviews in the store`, async () => {
|
||||||
|
await page.goto(
|
||||||
|
'/wp-admin/admin.php?page=wc-settings&tab=products'
|
||||||
|
);
|
||||||
|
await admin.page
|
||||||
|
.getByRole( 'checkbox', {
|
||||||
|
name: 'Enable product reviews',
|
||||||
|
} )
|
||||||
|
.uncheck();
|
||||||
|
await page.getByRole( 'button', { name: 'Save changes' } ).click();
|
||||||
|
} );
|
||||||
|
|
||||||
|
await test.step( 'Insert the block in a post and visit it', async () => {
|
||||||
|
await blockUtils.insertBlockAndVisit(
|
||||||
|
blockData.slug,
|
||||||
|
blockData.productSlug
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
page.locator( '.wc-block-components-product-rating' )
|
||||||
|
).not.toBeVisible();
|
||||||
|
} );
|
||||||
|
} );
|
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: minor
|
||||||
|
Type: update
|
||||||
|
|
||||||
|
Product Rating: hide reviews in the front end when disabled at store or product level.
|
|
@ -114,7 +114,9 @@ class ProductRating extends AbstractBlock {
|
||||||
$post_id = isset( $block->context['postId'] ) ? $block->context['postId'] : '';
|
$post_id = isset( $block->context['postId'] ) ? $block->context['postId'] : '';
|
||||||
$product = wc_get_product( $post_id );
|
$product = wc_get_product( $post_id );
|
||||||
|
|
||||||
if ( $product && $product->get_review_count() > 0 ) {
|
if ( $product && $product->get_review_count() > 0
|
||||||
|
&& $product->get_reviews_allowed()
|
||||||
|
&& wc_reviews_enabled() ) {
|
||||||
$product_reviews_count = $product->get_review_count();
|
$product_reviews_count = $product->get_review_count();
|
||||||
$product_rating = $product->get_average_rating();
|
$product_rating = $product->get_average_rating();
|
||||||
$parsed_attributes = $this->parse_attributes( $attributes );
|
$parsed_attributes = $this->parse_attributes( $attributes );
|
||||||
|
|
Loading…
Reference in New Issue