Add new E2E test coverage for Shopper My Account Downloads (#40100)

* Add new e2e test to cover my account downloads

* Include file name in the test

* Add missing changelog

* Update test to look for proper file name

* Exclude COD option and include order status
This commit is contained in:
Veljko V 2023-09-15 12:54:32 +02:00 committed by GitHub
parent c7161bb430
commit 426a8c2106
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 127 additions and 0 deletions

View File

@ -0,0 +1,4 @@
Significance: patch
Type: add
Add new e2e test for Shopper My Account Downloads section

View File

@ -0,0 +1,123 @@
const { test, expect } = require( '@playwright/test' );
const wcApi = require( '@woocommerce/woocommerce-rest-api' ).default;
const randomNum = new Date().getTime().toString();
const customer = {
username: `customer${ randomNum }`,
password: 'password',
email: `customer${ randomNum }@woocommercecoree2etestsuite.com`,
};
const product = {
name: 'Downloadable product My Account',
downloadLimit: '1',
};
test.describe( 'Customer can manage downloadable file in My Account > Downloads page', () => {
let productId, orderId;
test.beforeAll( async ( { baseURL } ) => {
const api = new wcApi( {
url: baseURL,
consumerKey: process.env.CONSUMER_KEY,
consumerSecret: process.env.CONSUMER_SECRET,
version: 'wc/v3',
} );
// add product
await api
.post( 'products', {
name: product.name,
type: 'simple',
regular_price: '9.99',
downloadable: true,
downloads: [
{
name: 'Test file',
file: `${ baseURL }/test-file/`,
},
],
download_limit: 1,
} )
.then( ( response ) => {
productId = response.data.id;
} );
// create customer
await api
.post( 'customers', customer )
.then( ( response ) => ( customer.id = response.data.id ) );
// create an order
await api
.post( 'orders', {
set_paid: true,
status: 'completed',
billing: {
first_name: 'Jane',
last_name: 'Smith',
email: customer.email,
},
line_items: [
{
product_id: productId,
quantity: 1,
},
],
} )
.then( ( response ) => {
orderId = response.data.id;
} );
// once the order is created, assign it to our existing customer user
await api.put( `orders/${ orderId }`, {
customer_id: customer.id,
} );
} );
test.afterAll( async ( { baseURL } ) => {
const api = new wcApi( {
url: baseURL,
consumerKey: process.env.CONSUMER_KEY,
consumerSecret: process.env.CONSUMER_SECRET,
version: 'wc/v3',
} );
await api.delete( `products/${ productId }`, {
force: true,
} );
await api.delete( `orders/${ orderId }`, { force: true } );
await api.delete( `customers/${ customer.id }`, { force: true } );
} );
test( 'can see downloadable file and click to download it', async ( {
page,
} ) => {
await page.goto( 'my-account/downloads/' );
// sign in as the "customer" user
await page.locator( '#username' ).fill( customer.username );
await page.locator( '#password' ).fill( customer.password );
await page.locator( 'text=Log in' ).click();
// verify that the downloadable product exist in downloads
await expect( page.locator( 'h1.entry-title' ) ).toContainText(
'Downloads'
);
await expect( page.locator( 'td.download-product' ) ).toContainText(
product.name
);
await expect( page.locator( 'td.download-remaining' ) ).toContainText(
product.downloadLimit
);
await expect(
page.locator( '.woocommerce-MyAccount-downloads-file' )
).toContainText( 'Test file' );
// click to simulate downloading and verify the file doesn't exist anymore in downloads
await page.locator( '.woocommerce-MyAccount-downloads-file' ).click();
await page.goto( 'my-account/downloads/' );
await expect( page.locator( '.woocommerce-info' ) ).toContainText(
'No downloads available yet.'
);
await expect( page.locator( '.wc-forward' ) ).toContainText(
'Browse products'
);
await page.locator( '.wc-forward' ).click();
await expect( page.locator( 'h1.page-title' ) ).toContainText( 'Shop' );
} );
} );