Merge branch 'trunk' into fix/remove-smoke-test-label
This commit is contained in:
commit
5c8bbea589
|
@ -1,5 +1,9 @@
|
||||||
# Unreleased
|
# Unreleased
|
||||||
|
|
||||||
|
## Added
|
||||||
|
|
||||||
|
- Added low stock threshold field for products
|
||||||
|
|
||||||
# 0.2.0
|
# 0.2.0
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
|
|
@ -34,7 +34,7 @@ abstract class AbstractProductInventory extends Model {
|
||||||
*
|
*
|
||||||
* @type {StockStatus}
|
* @type {StockStatus}
|
||||||
*/
|
*/
|
||||||
public readonly stockStatus: StockStatus = ''
|
public readonly stockStatus: StockStatus = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The status of backordering for a product.
|
* The status of backordering for a product.
|
||||||
|
@ -56,6 +56,13 @@ abstract class AbstractProductInventory extends Model {
|
||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
*/
|
*/
|
||||||
public readonly isOnBackorder: boolean = false;
|
public readonly isOnBackorder: boolean = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates the threshold for when the low stock notification will be sent to the merchant.
|
||||||
|
*
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
public readonly lowStockThreshold: number = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IProductInventory extends AbstractProductInventory {}
|
export interface IProductInventory extends AbstractProductInventory {}
|
||||||
|
|
|
@ -53,7 +53,7 @@ export type ProductGroupedUpdateParams = 'groupedProducts';
|
||||||
* Properties related to tracking inventory.
|
* Properties related to tracking inventory.
|
||||||
*/
|
*/
|
||||||
export type ProductInventoryUpdateParams = 'backorderStatus' | 'canBackorder' | 'trackInventory'
|
export type ProductInventoryUpdateParams = 'backorderStatus' | 'canBackorder' | 'trackInventory'
|
||||||
| 'onePerOrder' | 'remainingStock';
|
| 'onePerOrder' | 'remainingStock' | 'lowStockThreshold';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Properties related to sales tax.
|
* Properties related to sales tax.
|
||||||
|
|
|
@ -130,10 +130,11 @@ export class SimpleProduct extends AbstractProduct implements
|
||||||
public readonly onePerOrder: boolean = false;
|
public readonly onePerOrder: boolean = false;
|
||||||
public readonly trackInventory: boolean = false;
|
public readonly trackInventory: boolean = false;
|
||||||
public readonly remainingStock: number = -1;
|
public readonly remainingStock: number = -1;
|
||||||
public readonly stockStatus: StockStatus = ''
|
public readonly stockStatus: StockStatus = '';
|
||||||
public readonly backorderStatus: BackorderStatus = BackorderStatus.Allowed;
|
public readonly backorderStatus: BackorderStatus = BackorderStatus.Allowed;
|
||||||
public readonly canBackorder: boolean = false;
|
public readonly canBackorder: boolean = false;
|
||||||
public readonly isOnBackorder: boolean = false;
|
public readonly isOnBackorder: boolean = false;
|
||||||
|
public readonly lowStockThreshold: number = -1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ./abstracts/price.ts
|
* @see ./abstracts/price.ts
|
||||||
|
|
|
@ -115,10 +115,11 @@ export class VariableProduct extends AbstractProduct implements
|
||||||
public readonly onePerOrder: boolean = false;
|
public readonly onePerOrder: boolean = false;
|
||||||
public readonly trackInventory: boolean = false;
|
public readonly trackInventory: boolean = false;
|
||||||
public readonly remainingStock: number = -1;
|
public readonly remainingStock: number = -1;
|
||||||
public readonly stockStatus: StockStatus = ''
|
public readonly stockStatus: StockStatus = '';
|
||||||
public readonly backorderStatus: BackorderStatus = BackorderStatus.Allowed;
|
public readonly backorderStatus: BackorderStatus = BackorderStatus.Allowed;
|
||||||
public readonly canBackorder: boolean = false;
|
public readonly canBackorder: boolean = false;
|
||||||
public readonly isOnBackorder: boolean = false;
|
public readonly isOnBackorder: boolean = false;
|
||||||
|
public readonly lowStockThreshold: number = -1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ./abstracts/sales-tax.ts
|
* @see ./abstracts/sales-tax.ts
|
||||||
|
|
|
@ -118,6 +118,7 @@ export class ProductVariation extends AbstractProductData implements
|
||||||
public readonly backorderStatus: BackorderStatus = BackorderStatus.Allowed;
|
public readonly backorderStatus: BackorderStatus = BackorderStatus.Allowed;
|
||||||
public readonly canBackorder: boolean = false;
|
public readonly canBackorder: boolean = false;
|
||||||
public readonly isOnBackorder: boolean = false;
|
public readonly isOnBackorder: boolean = false;
|
||||||
|
public readonly lowStockThreshold: number = -1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ./abstracts/price.ts
|
* @see ./abstracts/price.ts
|
||||||
|
|
|
@ -345,6 +345,7 @@ export function createProductInventoryTransformation(): ModelTransformation[] {
|
||||||
onePerOrder: PropertyType.Boolean,
|
onePerOrder: PropertyType.Boolean,
|
||||||
stockStatus: PropertyType.String,
|
stockStatus: PropertyType.String,
|
||||||
backOrderStatus: PropertyType.String,
|
backOrderStatus: PropertyType.String,
|
||||||
|
lowStockThreshold: PropertyType.Integer,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
new KeyChangeTransformation< IProductInventory >(
|
new KeyChangeTransformation< IProductInventory >(
|
||||||
|
@ -356,6 +357,7 @@ export function createProductInventoryTransformation(): ModelTransformation[] {
|
||||||
backorderStatus: 'backorders',
|
backorderStatus: 'backorders',
|
||||||
canBackorder: 'backorders_allowed',
|
canBackorder: 'backorders_allowed',
|
||||||
isOnBackorder: 'backordered',
|
isOnBackorder: 'backordered',
|
||||||
|
lowStockThreshold: 'low_stock_amount',
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
|
@ -9,7 +9,7 @@ export const MENUS = [
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
'Home',
|
'Home',
|
||||||
'#toplevel_page_woocommerce > ul > li:nth-child(2) > a',
|
'',
|
||||||
'Home',
|
'Home',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
|
|
@ -28,13 +28,17 @@ const runPageLoadTest = () => {
|
||||||
await Promise.all( [
|
await Promise.all( [
|
||||||
page.click( menuElement ),
|
page.click( menuElement ),
|
||||||
page.waitForNavigation( { waitUntil: 'networkidle0' } ),
|
page.waitForNavigation( { waitUntil: 'networkidle0' } ),
|
||||||
|
merchant.dismissOnboardingWizard(),
|
||||||
|
merchant.collapseAdminMenu( false ),
|
||||||
] );
|
] );
|
||||||
|
|
||||||
// Click sub-menu item and wait for the page to finish loading
|
// Click sub-menu item and wait for the page to finish loading
|
||||||
|
if ( subMenuElement.length ) {
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
page.click( subMenuElement ),
|
page.click( subMenuElement ),
|
||||||
page.waitForNavigation( { waitUntil: 'networkidle0' } ),
|
page.waitForNavigation( { waitUntil: 'networkidle0' } ),
|
||||||
] );
|
] );
|
||||||
|
}
|
||||||
|
|
||||||
await expect( page ).toMatchElement( 'h1', {
|
await expect( page ).toMatchElement( 'h1', {
|
||||||
text: subMenuText,
|
text: subMenuText,
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
- Added `post-results-to-github-pr.js` to post smoke test results to a GitHub PR.
|
- Added `post-results-to-github-pr.js` to post smoke test results to a GitHub PR.
|
||||||
- Added jest flags to generate a json test report
|
- Added jest flags to generate a json test report
|
||||||
|
- Added more entries to `default.json`
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
|
||||||
|
|
|
@ -16,12 +16,133 @@
|
||||||
"name": "Simple product"
|
"name": "Simple product"
|
||||||
},
|
},
|
||||||
"variable": {
|
"variable": {
|
||||||
"name": "Variable Product with Three Variations"
|
"name": "Variable Product with Three Attributes",
|
||||||
|
"defaultAttributes": [
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"name": "Size",
|
||||||
|
"option": "Medium"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"name": "Colour",
|
||||||
|
"option": "Blue"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"name": "Colour",
|
||||||
|
"isVisibleOnProductPage": true,
|
||||||
|
"isForVariations": true,
|
||||||
|
"options": [
|
||||||
|
"Red",
|
||||||
|
"Green",
|
||||||
|
"Blue"
|
||||||
|
],
|
||||||
|
"sortOrder": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"name": "Size",
|
||||||
|
"isVisibleOnProductPage": true,
|
||||||
|
"isForVariations": true,
|
||||||
|
"options": [
|
||||||
|
"Small",
|
||||||
|
"Medium",
|
||||||
|
"Large"
|
||||||
|
],
|
||||||
|
"sortOrder": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"name": "Logo",
|
||||||
|
"isVisibleOnProductPage": true,
|
||||||
|
"isForVariations": true,
|
||||||
|
"options": [
|
||||||
|
"Woo",
|
||||||
|
"WordPress"
|
||||||
|
],
|
||||||
|
"sortOrder": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variations": [
|
||||||
|
{
|
||||||
|
"regularPrice": "19.99",
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"name": "Size",
|
||||||
|
"option": "Large"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Colour",
|
||||||
|
"option": "Red"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"regularPrice": "18.99",
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"name": "Size",
|
||||||
|
"option": "Medium"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Colour",
|
||||||
|
"option": "Green"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"regularPrice": "17.99",
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"name": "Size",
|
||||||
|
"option": "Small"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Colour",
|
||||||
|
"option": "Blue"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"grouped": {
|
||||||
|
"name": "Grouped Product with Three Children",
|
||||||
|
"groupedProducts": [
|
||||||
|
{
|
||||||
|
"name": "Base Unit",
|
||||||
|
"regularPrice": "29.99"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Add-on A",
|
||||||
|
"regularPrice": "11.95"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Add-on B",
|
||||||
|
"regularPrice": "18.97"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"external": {
|
||||||
|
"name": "External product",
|
||||||
|
"regularPrice": "24.99",
|
||||||
|
"buttonText": "Buy now",
|
||||||
|
"externalUrl": "https://wordpress.org/plugins/woocommerce"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"coupons": {
|
||||||
|
"percentage": {
|
||||||
|
"code": "20percent",
|
||||||
|
"discountType": "percent",
|
||||||
|
"amount": "20.00"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"addresses": {
|
"addresses": {
|
||||||
"admin": {
|
"admin": {
|
||||||
"store": {
|
"store": {
|
||||||
|
"email": "admin@woocommercecoree2etestsuite.com",
|
||||||
"firstname": "John",
|
"firstname": "John",
|
||||||
"lastname": "Doe",
|
"lastname": "Doe",
|
||||||
"company": "Automattic",
|
"company": "Automattic",
|
||||||
|
@ -61,6 +182,17 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"orders": {
|
||||||
|
"basicPaidOrder": {
|
||||||
|
"paymentMethod": "cod",
|
||||||
|
"status": "processing",
|
||||||
|
"billing": {
|
||||||
|
"firstName": "John",
|
||||||
|
"lastName": "Doe",
|
||||||
|
"email": "john.doe@example.com"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"onboardingwizard": {
|
"onboardingwizard": {
|
||||||
"industry": "Test industry",
|
"industry": "Test industry",
|
||||||
"numberofproducts": "1 - 10",
|
"numberofproducts": "1 - 10",
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
- `clickAndWaitForSelector( buttonSelector, resultSelector, timeout )` to click a button and wait for response
|
- `clickAndWaitForSelector( buttonSelector, resultSelector, timeout )` to click a button and wait for response
|
||||||
- Optional parameter `testResponse` to `withRestApi` functions that contain an `expect()`
|
- Optional parameter `testResponse` to `withRestApi` functions that contain an `expect()`
|
||||||
- `shopper.logout()` to log out the shopper account
|
- `shopper.logout()` to log out the shopper account
|
||||||
|
- `merchant.dismissOnboardingWizard()` to dismiss the onboarding wizard
|
||||||
|
- `merchant.collapseAdminMenu()` to expand or collapse the WP admin menu
|
||||||
|
|
||||||
# 0.1.6
|
# 0.1.6
|
||||||
|
|
||||||
|
|
|
@ -84,6 +84,8 @@ This package provides support for enabling retries in tests:
|
||||||
|
|
||||||
| Function | Parameters | Description |
|
| Function | Parameters | Description |
|
||||||
|----------|-------------|------------|
|
|----------|-------------|------------|
|
||||||
|
| `collapseAdminMenu` | `collapse` | Collapse or expand the WP admin menu |
|
||||||
|
| `dismissOnboardingWizard` | | Dismiss the onboarding wizard if present |
|
||||||
| `goToOrder` | `orderId` | Go to view a single order |
|
| `goToOrder` | `orderId` | Go to view a single order |
|
||||||
| `goToProduct` | `productId` | Go to view a single product |
|
| `goToProduct` | `productId` | Go to view a single product |
|
||||||
| `login` | | Log in as merchant |
|
| `login` | | Log in as merchant |
|
||||||
|
|
|
@ -52,6 +52,7 @@ const merchant = {
|
||||||
await Promise.all( [
|
await Promise.all( [
|
||||||
page.click( 'input[type=submit]' ),
|
page.click( 'input[type=submit]' ),
|
||||||
page.waitForNavigation( { waitUntil: 'networkidle0' } ),
|
page.waitForNavigation( { waitUntil: 'networkidle0' } ),
|
||||||
|
merchant.dismissOnboardingWizard(),
|
||||||
] );
|
] );
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -409,6 +410,41 @@ const merchant = {
|
||||||
await merchant.checkDatabaseUpdateComplete();
|
await merchant.checkDatabaseUpdateComplete();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dismiss the onboarding wizard if it is open.
|
||||||
|
*/
|
||||||
|
dismissOnboardingWizard: async () => {
|
||||||
|
let waitForNav = false;
|
||||||
|
const skipButton = await page.$( '.woocommerce-profile-wizard__footer-link' );
|
||||||
|
if ( skipButton ) {
|
||||||
|
await skipButton.click();
|
||||||
|
waitForNav = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dismiss usage tracking pop-up window if it appears on a new site
|
||||||
|
const usageTrackingHeader = await page.$( '.woocommerce-usage-modal button.is-secondary' );
|
||||||
|
if ( usageTrackingHeader ) {
|
||||||
|
await usageTrackingHeader.click();
|
||||||
|
waitForNav = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( waitForNav ) {
|
||||||
|
await page.waitForNavigation( { waitUntil: 'networkidle0' } );
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expand or collapse the WP admin menu.
|
||||||
|
* @param {boolean} collapse Flag to collapse or expand the menu. Default collapse.
|
||||||
|
*/
|
||||||
|
collapseAdminMenu: async ( collapse = true ) => {
|
||||||
|
const collapseButton = await page.$( '.folded #collapse-button' );
|
||||||
|
if ( ( ! collapseButton ) == collapse ) {
|
||||||
|
await collapseButton.click();
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = merchant;
|
module.exports = merchant;
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
"pelago/emogrifier": "3.1.0",
|
"pelago/emogrifier": "3.1.0",
|
||||||
"psr/container": "1.0.0",
|
"psr/container": "1.0.0",
|
||||||
"woocommerce/action-scheduler": "3.4.0",
|
"woocommerce/action-scheduler": "3.4.0",
|
||||||
"woocommerce/woocommerce-admin": "3.0.0-rc.1",
|
"woocommerce/woocommerce-admin": "3.0.1",
|
||||||
"woocommerce/woocommerce-blocks": "6.5.1"
|
"woocommerce/woocommerce-blocks": "6.5.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "ecce1670d22ae2df07e552adce1cfc29",
|
"content-hash": "ebdb5708b79cdb94e4b2ff5fbed40d89",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "automattic/jetpack-autoloader",
|
"name": "automattic/jetpack-autoloader",
|
||||||
|
@ -543,16 +543,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "woocommerce/woocommerce-admin",
|
"name": "woocommerce/woocommerce-admin",
|
||||||
"version": "3.0.0-rc.1",
|
"version": "3.0.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/woocommerce/woocommerce-admin.git",
|
"url": "https://github.com/woocommerce/woocommerce-admin.git",
|
||||||
"reference": "7c0cdd01ae98be058d684dd19023b0f40094cb63"
|
"reference": "5542e80021a43d24ab9b1d2d67083b608899835d"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/woocommerce/woocommerce-admin/zipball/7c0cdd01ae98be058d684dd19023b0f40094cb63",
|
"url": "https://api.github.com/repos/woocommerce/woocommerce-admin/zipball/5542e80021a43d24ab9b1d2d67083b608899835d",
|
||||||
"reference": "7c0cdd01ae98be058d684dd19023b0f40094cb63",
|
"reference": "5542e80021a43d24ab9b1d2d67083b608899835d",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -608,9 +608,9 @@
|
||||||
"homepage": "https://github.com/woocommerce/woocommerce-admin",
|
"homepage": "https://github.com/woocommerce/woocommerce-admin",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/woocommerce/woocommerce-admin/issues",
|
"issues": "https://github.com/woocommerce/woocommerce-admin/issues",
|
||||||
"source": "https://github.com/woocommerce/woocommerce-admin/tree/v3.0.0-rc.1"
|
"source": "https://github.com/woocommerce/woocommerce-admin/tree/v3.0.1"
|
||||||
},
|
},
|
||||||
"time": "2021-12-14T23:55:42+00:00"
|
"time": "2021-12-30T18:38:11+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "woocommerce/woocommerce-blocks",
|
"name": "woocommerce/woocommerce-blocks",
|
||||||
|
|
|
@ -484,12 +484,15 @@ function wc_is_file_valid_csv( $file, $check_path = true ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the current theme is an FSE theme.
|
* Check if the current theme is a block theme.
|
||||||
*
|
*
|
||||||
* @since x.x.x
|
* @since x.x.x
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function wc_current_theme_is_fse_theme() {
|
function wc_current_theme_is_fse_theme() {
|
||||||
|
if ( function_exists( 'wp_is_block_theme' ) ) {
|
||||||
|
return (bool) wp_is_block_theme();
|
||||||
|
}
|
||||||
if ( function_exists( 'gutenberg_is_fse_theme' ) ) {
|
if ( function_exists( 'gutenberg_is_fse_theme' ) ) {
|
||||||
return (bool) gutenberg_is_fse_theme();
|
return (bool) gutenberg_is_fse_theme();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue