Merge pull request #29305 from woocommerce/try/add-e2e-screenshot
create screenshot on e2e test failure
This commit is contained in:
commit
54edb576d5
|
@ -67,4 +67,8 @@ jobs:
|
|||
|
||||
- name: Run tests command.
|
||||
working-directory: code/woocommerce
|
||||
env:
|
||||
WC_E2E_SCREENSHOTS: 1
|
||||
E2E_SLACK_TOKEN: ${{ secrets.E2E_SLACK_TOKEN }}
|
||||
E2E_SLACK_CHANNEL: ${{ secrets.E2E_SLACK_CHANNEL }}
|
||||
run: npx wc-e2e test:e2e
|
||||
|
|
|
@ -50,6 +50,7 @@ tests/cli/vendor
|
|||
/tests/e2e/env/docker/wp-cli/initialize.sh
|
||||
/tests/e2e/env/build/
|
||||
/tests/e2e/env/build-module/
|
||||
/tests/e2e/screenshots
|
||||
/tests/e2e/utils/build/
|
||||
/tests/e2e/utils/build-module/
|
||||
|
||||
|
|
|
@ -3890,6 +3890,70 @@
|
|||
"@sinonjs/commons": "^1.7.0"
|
||||
}
|
||||
},
|
||||
"@slack/logger": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@slack/logger/-/logger-2.0.0.tgz",
|
||||
"integrity": "sha512-OkIJpiU2fz6HOJujhlhfIGrc8hB4ibqtf7nnbJQDerG0BqwZCfmgtK5sWzZ0TkXVRBKD5MpLrTmCYyMxoMCgPw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": ">=8.9.0"
|
||||
}
|
||||
},
|
||||
"@slack/types": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@slack/types/-/types-1.10.0.tgz",
|
||||
"integrity": "sha512-tA7GG7Tj479vojfV3AoxbckalA48aK6giGjNtgH6ihpLwTyHE3fIgRrvt8TWfLwW8X8dyu7vgmAsGLRG7hWWOg==",
|
||||
"dev": true
|
||||
},
|
||||
"@slack/web-api": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.1.0.tgz",
|
||||
"integrity": "sha512-9MVHw+rDBaFvkvzm8lDNH/nlkvJCDKRIjFGMdpbyZlVLsm4rcht4qyiL71bqdyLATHXJnWknb/sl0FQGLLobIA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@slack/logger": ">=1.0.0 <3.0.0",
|
||||
"@slack/types": "^1.7.0",
|
||||
"@types/is-stream": "^1.1.0",
|
||||
"@types/node": ">=12.0.0",
|
||||
"axios": "^0.21.1",
|
||||
"eventemitter3": "^3.1.0",
|
||||
"form-data": "^2.5.0",
|
||||
"is-stream": "^1.1.0",
|
||||
"p-queue": "^6.6.1",
|
||||
"p-retry": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"form-data": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
|
||||
"integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.6",
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
"p-queue": {
|
||||
"version": "6.6.2",
|
||||
"resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz",
|
||||
"integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"eventemitter3": "^4.0.4",
|
||||
"p-timeout": "^3.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"eventemitter3": {
|
||||
"version": "4.0.7",
|
||||
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
|
||||
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@tannin/compile": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz",
|
||||
|
@ -4002,6 +4066,15 @@
|
|||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/is-stream": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/is-stream/-/is-stream-1.1.0.tgz",
|
||||
"integrity": "sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/istanbul-lib-coverage": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
|
||||
|
@ -4069,6 +4142,12 @@
|
|||
"integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/retry": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
|
||||
"integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/stack-utils": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
|
||||
|
@ -9137,10 +9216,12 @@
|
|||
"requires": {
|
||||
"@automattic/puppeteer-utils": "github:Automattic/puppeteer-utils#0f3ec50",
|
||||
"@jest/test-sequencer": "^25.5.4",
|
||||
"@slack/web-api": "^6.1.0",
|
||||
"@wordpress/e2e-test-utils": "^4.15.0",
|
||||
"@wordpress/jest-preset-default": "^6.4.0",
|
||||
"app-root-path": "^3.0.0",
|
||||
"jest": "^25.1.0",
|
||||
"jest-each": "25.5.0",
|
||||
"jest-puppeteer": "^4.4.0"
|
||||
},
|
||||
"dependencies": {
|
||||
|
@ -9161,6 +9242,24 @@
|
|||
"puppeteer": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@slack/web-api": {
|
||||
"version": "5.15.0",
|
||||
"resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-5.15.0.tgz",
|
||||
"integrity": "sha512-tjQ8Zqv/Fmj9SOL9yIEd7IpTiKfKHi9DKAkfRVeotoX0clMr3SqQtBqO+KZMX27gm7dmgJsQaDKlILyzdCO+IA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@slack/logger": ">=1.0.0 <3.0.0",
|
||||
"@slack/types": "^1.7.0",
|
||||
"@types/is-stream": "^1.1.0",
|
||||
"@types/node": ">=8.9.0",
|
||||
"axios": "^0.21.1",
|
||||
"eventemitter3": "^3.1.0",
|
||||
"form-data": "^2.5.0",
|
||||
"is-stream": "^1.1.0",
|
||||
"p-queue": "^6.6.1",
|
||||
"p-retry": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@wordpress/e2e-test-utils": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils/-/e2e-test-utils-3.0.0.tgz",
|
||||
|
@ -9208,7 +9307,7 @@
|
|||
}
|
||||
},
|
||||
"prettier": {
|
||||
"version": "npm:prettier@1.19.1",
|
||||
"version": "npm:wp-prettier@1.19.1",
|
||||
"resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-1.19.1.tgz",
|
||||
"integrity": "sha512-mqAC2r1NDmRjG+z3KCJ/i61tycKlmADIjxnDhQab+KBxSAGbF/W7/zwB2guy/ypIeKrrftNsIYkNZZQKf3vJcg==",
|
||||
"dev": true
|
||||
|
@ -11900,40 +11999,6 @@
|
|||
"type-detect": "4.0.8"
|
||||
}
|
||||
},
|
||||
"@slack/logger": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@slack/logger/-/logger-2.0.0.tgz",
|
||||
"integrity": "sha512-OkIJpiU2fz6HOJujhlhfIGrc8hB4ibqtf7nnbJQDerG0BqwZCfmgtK5sWzZ0TkXVRBKD5MpLrTmCYyMxoMCgPw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": ">=8.9.0"
|
||||
}
|
||||
},
|
||||
"@slack/types": {
|
||||
"version": "1.9.0",
|
||||
"resolved": "https://registry.npmjs.org/@slack/types/-/types-1.9.0.tgz",
|
||||
"integrity": "sha512-RmwgMWqOtzd2JPXdiaD/tyrDD0vtjjRDFdxN1I3tAxwBbg4aryzDUVqFc8na16A+3Xik/UN8X1hvVTw8J4EB9w==",
|
||||
"dev": true
|
||||
},
|
||||
"@slack/web-api": {
|
||||
"version": "5.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-5.12.0.tgz",
|
||||
"integrity": "sha512-ygSnNHVid7PltGo7W36f2SNVHyliemkzxn9uSwgnWNF7CHmWBKWAylU/eoDml9l5K7akMOxbousiurOw4XqOFg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@slack/logger": ">=1.0.0 <3.0.0",
|
||||
"@slack/types": "^1.7.0",
|
||||
"@types/is-stream": "^1.1.0",
|
||||
"@types/node": ">=8.9.0",
|
||||
"@types/p-queue": "^2.3.2",
|
||||
"axios": "^0.19.0",
|
||||
"eventemitter3": "^3.1.0",
|
||||
"form-data": "^2.5.0",
|
||||
"is-stream": "^1.1.0",
|
||||
"p-queue": "^2.4.2",
|
||||
"p-retry": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@tannin/compile": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz",
|
||||
|
@ -12021,15 +12086,6 @@
|
|||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/is-stream": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/is-stream/-/is-stream-1.1.0.tgz",
|
||||
"integrity": "sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/istanbul-lib-coverage": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
|
||||
|
@ -12078,24 +12134,12 @@
|
|||
"integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/p-queue": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/p-queue/-/p-queue-2.3.2.tgz",
|
||||
"integrity": "sha512-eKAv5Ql6k78dh3ULCsSBxX6bFNuGjTmof5Q/T6PiECDq0Yf8IIn46jCyp3RJvCi8owaEmm3DZH1PEImjBMd/vQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/prettier": {
|
||||
"version": "1.19.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz",
|
||||
"integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/retry": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
|
||||
"integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/stack-utils": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
|
||||
|
@ -12626,15 +12670,6 @@
|
|||
"resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz",
|
||||
"integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q=="
|
||||
},
|
||||
"axios": {
|
||||
"version": "0.19.2",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
|
||||
"integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"follow-redirects": "1.5.10"
|
||||
}
|
||||
},
|
||||
"axobject-query": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
|
||||
|
@ -14024,12 +14059,6 @@
|
|||
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
||||
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
|
||||
},
|
||||
"eventemitter3": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
|
||||
"integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==",
|
||||
"dev": true
|
||||
},
|
||||
"exec-sh": {
|
||||
"version": "0.3.4",
|
||||
"resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
|
||||
|
@ -14404,26 +14433,6 @@
|
|||
"integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
|
||||
"dev": true
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.5.10",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
|
||||
"integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"debug": "=3.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"for-in": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
|
||||
|
@ -16894,16 +16903,134 @@
|
|||
}
|
||||
},
|
||||
"jest-each": {
|
||||
"version": "24.9.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz",
|
||||
"integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==",
|
||||
"version": "25.5.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz",
|
||||
"integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jest/types": "^24.9.0",
|
||||
"chalk": "^2.0.1",
|
||||
"jest-get-type": "^24.9.0",
|
||||
"jest-util": "^24.9.0",
|
||||
"pretty-format": "^24.9.0"
|
||||
"@jest/types": "^25.5.0",
|
||||
"chalk": "^3.0.0",
|
||||
"jest-get-type": "^25.2.6",
|
||||
"jest-util": "^25.5.0",
|
||||
"pretty-format": "^25.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@jest/types": {
|
||||
"version": "25.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz",
|
||||
"integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/istanbul-lib-coverage": "^2.0.0",
|
||||
"@types/istanbul-reports": "^1.1.1",
|
||||
"@types/yargs": "^15.0.0",
|
||||
"chalk": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"@types/yargs": {
|
||||
"version": "15.0.13",
|
||||
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz",
|
||||
"integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/yargs-parser": "*"
|
||||
}
|
||||
},
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
|
||||
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"dev": true
|
||||
},
|
||||
"jest-get-type": {
|
||||
"version": "25.2.6",
|
||||
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz",
|
||||
"integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==",
|
||||
"dev": true
|
||||
},
|
||||
"jest-util": {
|
||||
"version": "25.5.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz",
|
||||
"integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jest/types": "^25.5.0",
|
||||
"chalk": "^3.0.0",
|
||||
"graceful-fs": "^4.2.4",
|
||||
"is-ci": "^2.0.0",
|
||||
"make-dir": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"make-dir": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
|
||||
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"semver": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"pretty-format": {
|
||||
"version": "25.5.0",
|
||||
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz",
|
||||
"integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jest/types": "^25.5.0",
|
||||
"ansi-regex": "^5.0.0",
|
||||
"ansi-styles": "^4.0.0",
|
||||
"react-is": "^16.12.0"
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||
"dev": true
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has-flag": "^4.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"jest-environment-jsdom": {
|
||||
|
@ -17045,6 +17172,21 @@
|
|||
"jest-util": "^24.9.0",
|
||||
"pretty-format": "^24.9.0",
|
||||
"throat": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"jest-each": {
|
||||
"version": "24.9.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz",
|
||||
"integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jest/types": "^24.9.0",
|
||||
"chalk": "^2.0.1",
|
||||
"jest-get-type": "^24.9.0",
|
||||
"jest-util": "^24.9.0",
|
||||
"pretty-format": "^24.9.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"jest-leak-detector": {
|
||||
|
@ -18271,10 +18413,22 @@
|
|||
}
|
||||
},
|
||||
"p-queue": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.4.2.tgz",
|
||||
"integrity": "sha512-n8/y+yDJwBjoLQe1GSJbbaYQLTI7QHNZI2+rpmCDbe++WLf9HC3gf6iqj5yfPAV71W4UF3ql5W1+UBPXoXTxng==",
|
||||
"dev": true
|
||||
"version": "6.6.2",
|
||||
"resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz",
|
||||
"integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"eventemitter3": "^4.0.4",
|
||||
"p-timeout": "^3.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"eventemitter3": {
|
||||
"version": "4.0.7",
|
||||
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
|
||||
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"p-reduce": {
|
||||
"version": "1.0.0",
|
||||
|
@ -18282,16 +18436,6 @@
|
|||
"integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
|
||||
"dev": true
|
||||
},
|
||||
"p-retry": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.2.0.tgz",
|
||||
"integrity": "sha512-jPH38/MRh263KKcq0wBNOGFJbm+U6784RilTmHjB/HM9kH9V8WlCpVUcdOmip9cjXOh6MxZ5yk1z2SjDUJfWmA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/retry": "^0.12.0",
|
||||
"retry": "^0.12.0"
|
||||
}
|
||||
},
|
||||
"p-try": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
|
||||
|
@ -19053,12 +19197,6 @@
|
|||
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
|
||||
"dev": true
|
||||
},
|
||||
"retry": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
|
||||
"integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
|
||||
"dev": true
|
||||
},
|
||||
"rimraf": {
|
||||
"version": "2.6.3",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
|
||||
|
@ -20923,16 +21061,27 @@
|
|||
}
|
||||
},
|
||||
"@wordpress/e2e-test-utils": {
|
||||
"version": "4.15.0",
|
||||
"resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils/-/e2e-test-utils-4.15.0.tgz",
|
||||
"integrity": "sha512-mCOlNDX/yERd7hIAFB+y9x56iCQ2XyDZkWNlQNMYRH0+EdrQ5H5zE7MSxzycideIC7grxKw/j4RcuyxUdSWGDw==",
|
||||
"version": "4.16.1",
|
||||
"resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils/-/e2e-test-utils-4.16.1.tgz",
|
||||
"integrity": "sha512-Dpsq5m0VSvjIhro2MjACSzkOkOf1jGEryzgEMW1ikbT6YI+motspHfGtisKXgYhZJOnjV4PwuEg+9lPVnd971g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.11.2",
|
||||
"@wordpress/keycodes": "^2.16.0",
|
||||
"@wordpress/url": "^2.19.0",
|
||||
"@babel/runtime": "^7.12.5",
|
||||
"@wordpress/keycodes": "^2.18.0",
|
||||
"@wordpress/url": "^2.21.0",
|
||||
"lodash": "^4.17.19",
|
||||
"node-fetch": "^2.6.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.13.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.9.tgz",
|
||||
"integrity": "sha512-aY2kU+xgJ3dJ1eU6FMB9EH8dIe8dmusF1xEku52joLvw6eAFN0AI+WxCLDnpev2LEejWBAy2sBvBOBAjI3zmvA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@wordpress/eslint-plugin": {
|
||||
|
@ -21001,17 +21150,29 @@
|
|||
}
|
||||
},
|
||||
"@wordpress/i18n": {
|
||||
"version": "3.16.0",
|
||||
"resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-3.16.0.tgz",
|
||||
"integrity": "sha512-ZyRWplETgD90caVaBuGBFcnYVpcogji1g9Ctbb5AO2bGFeHpmPpjvWm0NE64iQTtLFEJoaCiq6oqUvAOPIQJpw==",
|
||||
"version": "3.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-3.18.0.tgz",
|
||||
"integrity": "sha512-e1uFWhWYnT0B6s3hyy+xS0S3bwabrvkZA84xxitiIcQvGnZDUPntqv6M9+VrgJVlmd2MR2TbCGJ5xKFAVFr/gA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.11.2",
|
||||
"@babel/runtime": "^7.12.5",
|
||||
"@wordpress/hooks": "^2.11.1",
|
||||
"gettext-parser": "^1.3.1",
|
||||
"lodash": "^4.17.19",
|
||||
"memize": "^1.1.0",
|
||||
"sprintf-js": "^1.1.1",
|
||||
"tannin": "^1.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.13.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.9.tgz",
|
||||
"integrity": "sha512-aY2kU+xgJ3dJ1eU6FMB9EH8dIe8dmusF1xEku52joLvw6eAFN0AI+WxCLDnpev2LEejWBAy2sBvBOBAjI3zmvA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@wordpress/jest-console": {
|
||||
|
@ -21040,14 +21201,25 @@
|
|||
}
|
||||
},
|
||||
"@wordpress/keycodes": {
|
||||
"version": "2.16.0",
|
||||
"resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-2.16.0.tgz",
|
||||
"integrity": "sha512-8CfxB+9f08FXMUsaO625abmbx2ZinFUz6upzXbe0Da8W3oy7+/TZz6EWsMVBEWz+alSR3Z2FUZ7xUuopHZFcow==",
|
||||
"version": "2.18.3",
|
||||
"resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-2.18.3.tgz",
|
||||
"integrity": "sha512-Lenyw+K2KgiqddBv5fDCh2JRfXFrONWNvPfv1DKXzHXTvBSI0JkU1RVP5WZTcVuEtctCZWL5JbhrkG2I26w68g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.11.2",
|
||||
"@wordpress/i18n": "^3.16.0",
|
||||
"@babel/runtime": "^7.12.5",
|
||||
"@wordpress/i18n": "^3.18.0",
|
||||
"lodash": "^4.17.19"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.13.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.9.tgz",
|
||||
"integrity": "sha512-aY2kU+xgJ3dJ1eU6FMB9EH8dIe8dmusF1xEku52joLvw6eAFN0AI+WxCLDnpev2LEejWBAy2sBvBOBAjI3zmvA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@wordpress/prettier-config": {
|
||||
|
@ -21057,15 +21229,25 @@
|
|||
"dev": true
|
||||
},
|
||||
"@wordpress/url": {
|
||||
"version": "2.19.0",
|
||||
"resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.19.0.tgz",
|
||||
"integrity": "sha512-RizWbBxYmWBlNd+q89r3N6Y2XO8eCG3VncnXDgbGnhV4e+2z9fjzp1/9C/SORftEn+ix/qBKbqygmkmBqb+wuw==",
|
||||
"version": "2.21.2",
|
||||
"resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.21.2.tgz",
|
||||
"integrity": "sha512-bLHg4pTo/9mQUkK1s1MU/Sjgnzfy2AkPvPn4ObGA8/4CFkMsDhQGAVhhw5YuezcxvaJkBiKJ+BxgFJ1QKksF6w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.11.2",
|
||||
"@babel/runtime": "^7.12.5",
|
||||
"lodash": "^4.17.19",
|
||||
"qs": "^6.5.2",
|
||||
"react-native-url-polyfill": "^1.1.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.13.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.9.tgz",
|
||||
"integrity": "sha512-aY2kU+xgJ3dJ1eU6FMB9EH8dIe8dmusF1xEku52joLvw6eAFN0AI+WxCLDnpev2LEejWBAy2sBvBOBAjI3zmvA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@xtuc/ieee754": {
|
||||
|
@ -21722,6 +21904,15 @@
|
|||
"integrity": "sha512-arU1h31OGFu+LPrOLGZ7nB45v940NMDMEJeNmbutu57P+UFDVnkZg3e+J1I2HJRZ9hT7gO8J91dn/PMrAiKakA==",
|
||||
"dev": true
|
||||
},
|
||||
"axios": {
|
||||
"version": "0.21.1",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
|
||||
"integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"follow-redirects": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"axobject-query": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
|
||||
|
@ -25926,6 +26117,12 @@
|
|||
"readable-stream": "^2.3.6"
|
||||
}
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.13.3",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz",
|
||||
"integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==",
|
||||
"dev": true
|
||||
},
|
||||
"for-in": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
|
||||
|
@ -33596,6 +33793,33 @@
|
|||
"integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
|
||||
"dev": true
|
||||
},
|
||||
"p-retry": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.4.0.tgz",
|
||||
"integrity": "sha512-gVB/tBsG+3AHI1SyDHRrX6n9ZL0Bcbifps9W9/Bgu3Oyu4/OrAh8SvDzDsvpP0oxfCt3oWNT+0fQ9LyUGwBTLg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/retry": "^0.12.0",
|
||||
"retry": "^0.12.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"retry": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
|
||||
"integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"p-timeout": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
|
||||
"integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"p-finally": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"p-try": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
|
||||
|
@ -34417,9 +34641,9 @@
|
|||
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
|
||||
},
|
||||
"react-native-url-polyfill": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-url-polyfill/-/react-native-url-polyfill-1.2.0.tgz",
|
||||
"integrity": "sha512-hpLZ8RyS3oGVyTOe/HjoqVoCOSkeJvrCoEB3bJsY7t9uh7kpQDV6kgvdlECEafYpxe3RzMrKLVcmWRbPU7CuAw==",
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-url-polyfill/-/react-native-url-polyfill-1.3.0.tgz",
|
||||
"integrity": "sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"whatwg-url-without-unicode": "8.0.0-3"
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
"@woocommerce/e2e-utils": "file:tests/e2e/utils",
|
||||
"@wordpress/babel-plugin-import-jsx-pragma": "1.1.3",
|
||||
"@wordpress/babel-preset-default": "3.0.2",
|
||||
"@wordpress/e2e-test-utils": "^4.6.0",
|
||||
"@wordpress/e2e-test-utils": "^4.16.1",
|
||||
"@wordpress/eslint-plugin": "7.3.0",
|
||||
"autoprefixer": "9.8.6",
|
||||
"babel-eslint": "10.1.0",
|
||||
|
|
|
@ -401,7 +401,7 @@ export class ModelRepository< T extends ModelRepositoryParams > implements
|
|||
}
|
||||
|
||||
return ( this.listHook as ListChildFn< T > )(
|
||||
paramsOrParent as ParentID< T >,
|
||||
( paramsOrParent as unknown ) as ParentID< T >,
|
||||
params,
|
||||
);
|
||||
}
|
||||
|
@ -428,7 +428,7 @@ export class ModelRepository< T extends ModelRepositoryParams > implements
|
|||
}
|
||||
|
||||
return ( this.createHook as CreateChildFn< T > )(
|
||||
propertiesOrParent as ParentID<T>,
|
||||
( propertiesOrParent as unknown ) as ParentID<T>,
|
||||
properties as Partial< ModelClass<T> >,
|
||||
);
|
||||
}
|
||||
|
@ -455,7 +455,7 @@ export class ModelRepository< T extends ModelRepositoryParams > implements
|
|||
}
|
||||
|
||||
return ( this.readHook as ReadChildFn< T > )(
|
||||
idOrParent as ParentID< T >,
|
||||
( idOrParent as unknown ) as ParentID< T >,
|
||||
childID,
|
||||
);
|
||||
}
|
||||
|
@ -480,14 +480,14 @@ export class ModelRepository< T extends ModelRepositoryParams > implements
|
|||
if ( properties === undefined ) {
|
||||
return ( this.updateHook as UpdateFn< T > )(
|
||||
idOrParent as ModelID,
|
||||
propertiesOrChildID as UpdateParams< T >,
|
||||
( propertiesOrChildID as unknown ) as UpdateParams< T >,
|
||||
);
|
||||
}
|
||||
|
||||
return ( this.updateHook as UpdateChildFn< T > )(
|
||||
idOrParent as ParentID< T >,
|
||||
( idOrParent as unknown ) as ParentID< T >,
|
||||
propertiesOrChildID as ModelID,
|
||||
properties,
|
||||
( properties as unknown ) as UpdateParams< T >,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -513,7 +513,7 @@ export class ModelRepository< T extends ModelRepositoryParams > implements
|
|||
}
|
||||
|
||||
return ( this.deleteHook as DeleteChildFn< T > )(
|
||||
idOrParent as ParentID< T >,
|
||||
( idOrParent as unknown ) as ParentID< T >,
|
||||
childID,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
# Unreleased
|
||||
|
||||
## Added
|
||||
|
||||
- Support for screenshots on test errors
|
||||
- Slackbot to report errors to Slack channel
|
||||
|
||||
## Fixed
|
||||
|
||||
- Update `wc-e2e` script to fix an issue with directories with a space in their name
|
||||
|
||||
# 0.2.0
|
||||
|
||||
## Fixed
|
||||
|
||||
- Return jest exit code from `npx wc-e2e test:e2e*`
|
||||
|
||||
## Added
|
||||
|
||||
- support for custom container name
|
||||
|
@ -19,6 +20,7 @@
|
|||
|
||||
## Fixed
|
||||
|
||||
- Return jest exit code from `npx wc-e2e test:e2e*`
|
||||
- Remove redundant `puppeteer` dependency
|
||||
- Support for admin user configuration from `default.json`
|
||||
|
||||
|
|
|
@ -71,6 +71,16 @@ module.exports = jestConfig;
|
|||
|
||||
**NOTE:** Your project's Jest config file is expected to be: `tests/e2e/config/jest.config.js`.
|
||||
|
||||
#### Test Screenshots
|
||||
|
||||
The test sequencer provides a screenshot function for test failures. To enable screenshots on test failure use
|
||||
|
||||
```shell script
|
||||
WC_E2E_SCREENSHOTS=1 npx wc-e2e test:e2e
|
||||
```
|
||||
|
||||
Screenshots will be saved to `tests/e2e/screenshots`
|
||||
|
||||
### Jest Puppeteer Config
|
||||
|
||||
The test sequencer uses the following default Puppeteer configuration:
|
||||
|
@ -124,6 +134,27 @@ Depending on the project and testing scenario, the built in testing environment
|
|||
- [Built In Container](https://github.com/woocommerce/woocommerce/tree/trunk/tests/e2e/env/builtin.md)
|
||||
- [External Container](https://github.com/woocommerce/woocommerce/tree/trunk/tests/e2e/env/external.md)
|
||||
|
||||
### Slackbot Setup
|
||||
|
||||
The test runner has support for posting a message and screenshot to a Slack channel when there is an error in a test. It currently supports both Travis CI and Github actions.
|
||||
|
||||
To implement the Slackbot in your CI:
|
||||
|
||||
- Create a [Slackbot App](https://slack.com/help/articles/115005265703-Create-a-bot-for-your-workspace)
|
||||
- Give the app the following permissions:
|
||||
- `channel:join`
|
||||
- `chat:write`
|
||||
- `files:write`
|
||||
- `incoming-webhook`
|
||||
- Add the app to your channel
|
||||
- In your CI environment
|
||||
- Add the environment variable `WC_E2E_SCREENSHOTS=1`
|
||||
- Add your app Oauth token to a CI secret `E2E_SLACK_TOKEN`
|
||||
- Add the Slack channel name (without the #) to a CI secret `E2E_SLACK_CHANNEL`
|
||||
- Add the secrets to the test run using the same variable names
|
||||
|
||||
To test your setup, create a pull request that triggers an error in the E2E tests.
|
||||
|
||||
## Additional information
|
||||
|
||||
Refer to [`tests/e2e/core-tests`](https://github.com/woocommerce/woocommerce/tree/trunk/tests/e2e/core-tests) for some test examples, and [`tests/e2e`](https://github.com/woocommerce/woocommerce/tree/trunk/tests/e2e) for general information on e2e tests.
|
||||
|
|
|
@ -5,7 +5,7 @@ const program = require( 'commander' );
|
|||
const path = require( 'path' );
|
||||
const fs = require( 'fs' );
|
||||
const { getAppRoot } = require( '../utils' );
|
||||
const { JEST_PUPPETEER_CONFIG } = process.env;
|
||||
const { WC_E2E_SCREENSHOTS, JEST_PUPPETEER_CONFIG } = process.env;
|
||||
|
||||
program
|
||||
.usage( '<file ...> [options]' )
|
||||
|
@ -15,6 +15,17 @@ program
|
|||
|
||||
const appPath = getAppRoot();
|
||||
|
||||
// clear the screenshots folder before running tests.
|
||||
if ( WC_E2E_SCREENSHOTS ) {
|
||||
const screenshotPath = path.resolve(appPath, 'tests/e2e/screenshots');
|
||||
if (fs.existsSync(screenshotPath)) {
|
||||
fs.readdirSync(screenshotPath).forEach((file, index) => {
|
||||
const filename = path.join(screenshotPath, file);
|
||||
fs.unlinkSync(filename);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const nodeConfigDirs = [
|
||||
path.resolve( __dirname, '../config' ),
|
||||
];
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
* External Dependencies
|
||||
*/
|
||||
const { jestConfig } = require( '@automattic/puppeteer-utils' );
|
||||
const { WC_E2E_SCREENSHOTS } = process.env;
|
||||
const path = require( 'path' );
|
||||
const fs = require( 'fs' );
|
||||
|
||||
|
@ -10,8 +11,13 @@ const fs = require( 'fs' );
|
|||
*/
|
||||
const { getAppRoot } = require( '../utils' );
|
||||
|
||||
let failureSetup = [];
|
||||
if ( WC_E2E_SCREENSHOTS ) {
|
||||
failureSetup.push( path.resolve( __dirname, '../build/setup/jest.failure.js' ) );
|
||||
}
|
||||
let setupFilesAfterEnv = [
|
||||
path.resolve( __dirname, '../build/setup/jest.setup.js' ),
|
||||
...failureSetup,
|
||||
'expect-puppeteer',
|
||||
];
|
||||
|
||||
|
|
|
@ -23,10 +23,12 @@
|
|||
"dependencies": {
|
||||
"@automattic/puppeteer-utils": "github:Automattic/puppeteer-utils#0f3ec50",
|
||||
"@jest/test-sequencer": "^25.5.4",
|
||||
"@slack/web-api": "^6.1.0",
|
||||
"@wordpress/e2e-test-utils": "^4.15.0",
|
||||
"@wordpress/jest-preset-default": "^6.4.0",
|
||||
"app-root-path": "^3.0.0",
|
||||
"jest": "^25.1.0",
|
||||
"jest-each": "25.5.0",
|
||||
"jest-puppeteer": "^4.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
/** @format */
|
||||
import {
|
||||
sendFailedTestScreenshotToSlack,
|
||||
sendFailedTestMessageToSlack,
|
||||
} from '../slack';
|
||||
|
||||
const path = require( 'path' );
|
||||
const mkdirp = require( 'mkdirp' );
|
||||
import { bind } from 'jest-each';
|
||||
const { getAppRoot } = require( '../../utils' );
|
||||
|
||||
/**
|
||||
* Override the test case method so we can take screenshots of assertion failures.
|
||||
*
|
||||
* See: https://github.com/smooth-code/jest-puppeteer/issues/131#issuecomment-469439666
|
||||
*/
|
||||
|
||||
/**
|
||||
* We need to reference the original version of Jest.
|
||||
*/
|
||||
const originalDescribe = global.describe;
|
||||
const originalIt = global.it;
|
||||
|
||||
/**
|
||||
* A custom describe function that stores the name of the describe block.
|
||||
* @type {describe}
|
||||
*/
|
||||
global.describe = (() => {
|
||||
const describe = ( blockName, callback ) => {
|
||||
|
||||
try {
|
||||
originalDescribe( blockName, callback );
|
||||
} catch ( e ) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
};
|
||||
const only = ( blockName, callback ) => {
|
||||
originalDescribe.only( blockName, callback );
|
||||
};
|
||||
const skip = ( blockName, callback ) => {
|
||||
originalDescribe.skip( blockName, callback );
|
||||
};
|
||||
|
||||
describe.each = bind( describe, false );
|
||||
only.each = bind( only, false );
|
||||
skip.each = bind( skip, false );
|
||||
describe.only = only;
|
||||
describe.skip = skip;
|
||||
|
||||
return describe;
|
||||
})();
|
||||
|
||||
/**
|
||||
* A custom it function that wraps the test function in a callback
|
||||
* which takes a screenshot on test failure.
|
||||
*
|
||||
* @type {function(*=, *=): *}
|
||||
*/
|
||||
global.it = (() => {
|
||||
const test = async ( testName, callback ) => {
|
||||
const testCallback = async () => screenshotTest( testName, callback );
|
||||
return originalIt( testName, testCallback );
|
||||
};
|
||||
const only = ( testName, callback ) => {
|
||||
return originalIt.only( testName, callback );
|
||||
};
|
||||
const skip = ( testName, callback ) => {
|
||||
return originalIt.skip( testName, callback );
|
||||
};
|
||||
|
||||
test.each = bind( test, false );
|
||||
only.each = bind( only, false );
|
||||
skip.each = bind( skip, false );
|
||||
test.only = only;
|
||||
test.skip = skip;
|
||||
|
||||
return test;
|
||||
})();
|
||||
|
||||
/**
|
||||
* Save a screenshot during a test if the test fails.
|
||||
* @param testName
|
||||
* @param callback
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
const screenshotTest = async ( testName, callback ) => {
|
||||
try {
|
||||
await callback();
|
||||
} catch ( e ) {
|
||||
const testTitle = testName.replace( /\.$/, '' );
|
||||
const appPath = getAppRoot();
|
||||
const savePath = path.resolve( appPath, 'tests/e2e/screenshots' );
|
||||
const filePath = path.join(
|
||||
savePath,
|
||||
`${ testTitle }.png`.replace( /[^a-z0-9.-]+/gi, '-' )
|
||||
);
|
||||
|
||||
mkdirp.sync( savePath );
|
||||
await page.screenshot( {
|
||||
path: filePath,
|
||||
fullPage: true,
|
||||
} );
|
||||
|
||||
await sendFailedTestMessageToSlack( testTitle );
|
||||
await sendFailedTestScreenshotToSlack( filePath );
|
||||
|
||||
throw ( e );
|
||||
}
|
||||
};
|
|
@ -0,0 +1 @@
|
|||
export * from './reporter';
|
|
@ -0,0 +1,148 @@
|
|||
const { createReadStream } = require( 'fs' );
|
||||
const { WebClient, ErrorCode } = require( '@slack/web-api' );
|
||||
const {
|
||||
GITHUB_ACTIONS,
|
||||
GITHUB_REF,
|
||||
GITHUB_SHA,
|
||||
GITHUB_REPOSITORY,
|
||||
GITHUB_RUN_ID,
|
||||
TRAVIS_PULL_REQUEST_BRANCH,
|
||||
TRAVIS_COMMIT,
|
||||
TRAVIS_BUILD_WEB_URL,
|
||||
E2E_SLACK_TOKEN,
|
||||
E2E_SLACK_CHANNEL,
|
||||
WC_E2E_SCREENSHOTS,
|
||||
} = process.env;
|
||||
|
||||
let web;
|
||||
|
||||
/**
|
||||
* Initialize the Slack web client.
|
||||
*
|
||||
* @returns {WebClient}
|
||||
*/
|
||||
const initializeWeb = () => {
|
||||
if ( ! web ) {
|
||||
web = new WebClient( E2E_SLACK_TOKEN );
|
||||
}
|
||||
return web;
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize Slack parameters if tests are running in CI.
|
||||
* @returns {Object|boolean}
|
||||
*/
|
||||
const initializeSlack = () => {
|
||||
if ( ! WC_E2E_SCREENSHOTS || ! E2E_SLACK_TOKEN ) {
|
||||
return false;
|
||||
}
|
||||
if ( ! GITHUB_ACTIONS && ! TRAVIS_PULL_REQUEST_BRANCH ) {
|
||||
return false;
|
||||
}
|
||||
// Build PR info
|
||||
if ( GITHUB_ACTIONS ) {
|
||||
const refArray = GITHUB_REF.split( '/' );
|
||||
const branch = refArray.pop();
|
||||
return {
|
||||
branch,
|
||||
commit: GITHUB_SHA,
|
||||
webUrl: `https://github.com/${ GITHUB_REPOSITORY }/actions/runs/${ GITHUB_RUN_ID }`,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
branch: TRAVIS_PULL_REQUEST_BRANCH,
|
||||
commit: TRAVIS_COMMIT,
|
||||
webUrl: TRAVIS_BUILD_WEB_URL,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Post a message to a Slack channel for a failed test.
|
||||
*
|
||||
* @param testName
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
export async function sendFailedTestMessageToSlack( testName ) {
|
||||
const { branch, commit, webUrl } = initializeSlack();
|
||||
if ( ! branch ) {
|
||||
return;
|
||||
}
|
||||
const web = initializeWeb();
|
||||
|
||||
try {
|
||||
// Adding the app does not add the app user to the channel
|
||||
await web.conversations.join({
|
||||
channel: E2E_SLACK_CHANNEL,
|
||||
token: E2E_SLACK_TOKEN,
|
||||
});
|
||||
} catch ( error ) {
|
||||
// Check the code property and log the response
|
||||
if ( error.code === ErrorCode.PlatformError || error.code === ErrorCode.RequestError ||
|
||||
error.code === ErrorCode.RateLimitedError || error.code === ErrorCode.HTTPError ) {
|
||||
console.log( error.data );
|
||||
} else {
|
||||
// Some other error, oh no!
|
||||
console.log(
|
||||
'Error joining channel',
|
||||
error
|
||||
);
|
||||
}
|
||||
}
|
||||
try {
|
||||
// For details, see: https://api.slack.com/methods/chat.postMessage
|
||||
await web.chat.postMessage({
|
||||
channel: E2E_SLACK_CHANNEL,
|
||||
token: E2E_SLACK_TOKEN,
|
||||
text: `Test failed on *${ branch }* branch. \n
|
||||
The commit this build is testing is *${ commit }*. \n
|
||||
The name of the test that failed: *${ testName }*. \n
|
||||
See screenshot of the failed test below. *Build log* could be found here: ${ webUrl }`,
|
||||
});
|
||||
} catch ( error ) {
|
||||
// Check the code property and log the response
|
||||
if ( error.code === ErrorCode.PlatformError || error.code === ErrorCode.RequestError ||
|
||||
error.code === ErrorCode.RateLimitedError || error.code === ErrorCode.HTTPError ) {
|
||||
console.log( error.data );
|
||||
} else {
|
||||
// Some other error, oh no!
|
||||
console.log(
|
||||
'The error occurred does not match an error we are checking for in this block.',
|
||||
error
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Post a screenshot to a Slack channel for a failed test.
|
||||
* @param screenshotOfFailedTest
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
export async function sendFailedTestScreenshotToSlack( screenshotOfFailedTest ) {
|
||||
const pr = initializeSlack();
|
||||
if ( ! pr ) {
|
||||
return;
|
||||
}
|
||||
const web = initializeWeb();
|
||||
const filename = 'screenshot_of_failed_test.png';
|
||||
|
||||
try {
|
||||
// For details, see: https://api.slack.com/methods/files.upload
|
||||
await web.files.upload({
|
||||
channels: E2E_SLACK_CHANNEL,
|
||||
token: E2E_SLACK_TOKEN,
|
||||
filename,
|
||||
file: createReadStream( screenshotOfFailedTest ),
|
||||
});
|
||||
} catch ( error ) {
|
||||
// Check the code property and log the response
|
||||
if ( error.code === ErrorCode.PlatformError || error.code === ErrorCode.RequestError ||
|
||||
error.code === ErrorCode.RateLimitedError || error.code === ErrorCode.HTTPError ) {
|
||||
console.log( error.data );
|
||||
} else {
|
||||
// Some other error, oh no!
|
||||
console.log( 'The error occurred does not match an error we are checking for in this block.' );
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue