10 KiB
WooCommerce PayPal Payments Plugin Tests
Depends on @inpsyde/playwright-utils package.
Detailed information about current test project can be found in docs.
Table of Content
- Local installation
- Project configuration (Devs)
- Project configuration (QA team)
- Running tests
- Autotest Execution workflow
- Coding standards
- Reset Kinsta env
- Automated env setup scripts
Local installation
-
Clone repository locally:
git clone https://github.com/woocommerce/woocommerce-paypal-payments.git
Project configuration (Devs)
-
Create and configure
.envfile: -
Set general variables following these steps.
-
Set PayPal API keys and test credentials. See
.env.example. The.envcontent with actual test users' credentials is stored in 1Password.
Project configuration (QA team)
-
Create and configure
.envfile:1.1 Set general variables following these steps.
1.2 Set PayPal API keys and test credentials. See
.env.example. For Google Pay transaction tests, make sure to also setGOOGLE_PAY_EMAILandGOOGLE_PAY_PASSWORD. The.envcontent with actual test users' credentials is stored in 1Password. -
Configure
playwright.config.tsof the project following these steps. -
Configure reporting to Xray in Jira following these steps.
-
To avoid conflicts make sure any other payment plugins are deleted.
-
Additional website and WooCommerce configuration is done automatically via
setup-woocommercedependency project (see/tests/_setup/woocommerce.setup.ts).
Installation of playwright-utils for local development
-
Add
yarntodevDependenciesinpackage.json:"devDependencies": { "yarn": "^1.22.21", -
Execute steps for local development described here.
General one-line
tsc-watchcommand is:npm run e2e:setup:tests && cd ./playwright-utils && yarn devLocal -
After development is finished cleanup
package.jsonand regenerate thepackage-lock.json.
Running tests
npm run tests:all-- Runs all the testsnpm run tests:critical-- Runs all the critical testsnpm run tests:onboarding-- Runs all the onboarding tests
Additional options to run tests from command line
-
Add scripts to
package.jsonof the project (eligible for Windows, not tested on other OS):"scripts": { "test:smoke": "npx playwright test --grep \"@Smoke\"", "test:critical": "npx playwright test --grep \"@Critical\"", "test:ui": "npx playwright test --grep \"UI\"", "test:functional": "npx playwright test --grep \"Functional\"", "test:all": "npm run test:ui & npm run test:functional" },Run script with the following command:
npm run test:critical -
Run several tests by test ID (on Windows, Powershell):
npx playwright test --grep --% "PCP-123^|PCP-124^|PCP-125"It may be required additionally to specify the project (if tests relate to more then one project):
npx playwright test --project "project-name" --grep --% "PCP-123^|PCP-124^|PCP-125"
Autotest Execution workflow
-
Create Test Execution ticket in Jira, named after the tested plugin version, for example "Test Execution for v2.3.4-rc1, PHP8.1".
Note: For autotest execution there's no need to manually add tests cases to the execution - the executed tests will be imported automatically after execution.
-
Link release ticket (via
tests: PCP-234) to test execution ticket. -
Set Test Execution ticket status
In progress. -
In
.envfile add/update test execution ticket key (XRAY_TEST_EXEC_KEY='PCP-234'). -
Download tested plugin
.zippackage (usually attached to release ticket) and add it to/tests/qa/resources/files. You may need to remove version number from the file name (expected name:woocommerce-paypal-payments.zip). -
Optional: delete previous version of tested plugin from the website if you don't execute plugin foundation tests.
-
Start autotest execution from command line for the defined scope of tests (see this section). You should see
Test execution Jira key: PCP-234in the terminal. -
When finished test results will be imported to the specified test execution ticket in Jira.
-
Analyze failed tests (if any). Restart execution for failed tests, possibly in debug mode (for Windows):
npx playwright test --grep --% "PCP-123^|PCP-124^|PCP-125" --debugNote: command for restarting failed/skipped tests is posted to the terminal after the execution.
-
Report bugs (if any) and attach them to the test-runs of failed tests (Click "Create defect" or "Add defect" on test execution screen).
-
If needed fix failing tests in a new branch, create a PR and assign it for review.
-
Set Test execution ticket status to
Done.
Coding standards
Before committing changes run following command:
npm run e2e:lint:js:fix
Reset Kinsta env
Note: the staging env on Kinsta should be created and the script to reset env provided by devops (if not - create a ticket on SDO board).
Find SSH data in Kinsta dashboard for your tested env. Replace data in the following one-line command and run it in the terminal to reset the env:
ssh <your-ssh-username>@<your-ssh-host> -p <your-ssh-port> '${HOME}/bin/reset-wp.sh --wp-version=6.9 --wp-type=single && exit'
Automated env setup scripts for migration
Preconditions
Local usage of automated env setup scripts assumes that the following steps are fulfilled:
-
Clone PayPal repo to your local machine:
git clone https://github.com/woocommerce/woocommerce-paypal-payments.gitNote: temporary, for migration testing change branch to
dev/qa/migration-tests:git checkout dev/qa/migration-tests. -
Copy following packages into
/tests/qa/resources/files:-
Configured PayPal plugin package (e.g. v3.4.1) named as
woocommerce-paypal-payments.zip -
Optional: Paypal plugin version to upgrade/downgrade to (e.g. v3.0.0 or v4.0.0) as
woocommerce-paypal-payments-update.zip. -
WooCommerce Subscriptions package named as
woocommerce-subscriptions.zip
-
-
Install Node dependencies and Playwright:
npm run e2e:setup:tests -
In the root create a
.envfile and copy-paste content fromPCP .envvault of 1Password replacing all the data for your test env. Alternatively use.env.example. -
Run the scripts described below.
Script naming convention
Scripts follow a naming pattern:
| Prefix | Meaning | Example |
|---|---|---|
e2e:env:reset |
Reset only env | npm run e2e:env:reset |
e2e:env:reset:wc |
Reset only env + WooCommerce | npm run e2e:env:reset:wc |
e2e:env:reset:pcp:* |
Reset env + WooCommerce + PCP setup (single run) | npm run e2e:env:reset:pcp:usa |
e2e:env:setup:* |
PCP/config setup only, no reset | npm run e2e:env:setup:pcp:usa |
Reset env and WooCommerce setup
- Resets the env
- Configures website permalinks (
%postname%) - Installs plugins and themes:
- WooCommerce
- Storefront theme
- Additional plugins (Disable Nonce, WC Subscriptions, etc.)
- Configures WooCommerce for default country (USA):
- API keys
- Country/currency: USA/USD
- Taxes: included, 10% rate
- Shipping: flat rate/10 USD and free
- Emails: disabled
- Creates test entities:
- Classic cart and checkout
- Tested products
- Coupons
- Registered US customer
# Reset env only
npm run env:reset
# Reset env, WooCommerce
npm run env:reset:wc
WooCommerce setup only (no SSH reset):
npm run e2e:env:setup:wc
Setup PCP for specific country
- Installs PCP plugin (
woocommerce-paypal-payments.zip). - Connects merchant from specified country.
For USA — PCP + connected US merchant + ACDC enabled (PayPal and other PMs disabled).
| With reset | Without reset |
|---|---|
npm run e2e:env:reset:pcp:usa |
npm run e2e:env:setup:pcp:usa |
For Germany & PUI (disabled by default)
| With reset | Without reset |
|---|---|
npm run e2e:env:reset:pcp:germany |
npm run e2e:env:setup:pcp:germany |
For Mexico & OXXO (disabled by default)
| With reset | Without reset |
|---|---|
npm run e2e:env:reset:pcp:mexico |
npm run e2e:env:setup:pcp:mexico |
Upgrade PCP (without env reload)
Installs woocommerce-paypal-payments-update.zip over the existing PCP installation.
npm run e2e:env:setup:pcp:update
Switch checkout layout (without env reload)
Enable classic cart/checkout
npm run e2e:env:setup:checkout:classic
Enable block cart/checkout
npm run e2e:env:setup:checkout:block
Switch tax configuration (without env reload)
Tax included in prices
npm run e2e:env:setup:tax:inc
Tax excluded from prices
npm run e2e:env:setup:tax:exc