diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index a735ba8f7c..792b62736c 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -8,7 +8,7 @@ "hasInstallScript": true, "dependencies": { "@umbraco/json-models-builders": "^1.0.6", - "@umbraco/playwright-testhelpers": "2.0.0-beta.2", + "@umbraco/playwright-testhelpers": "2.0.0-beta.4", "camelize": "^1.0.0", "dotenv": "^16.3.1", "faker": "^4.1.0", @@ -122,10 +122,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.17.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.33.tgz", - "integrity": "sha512-noEeJ06zbn3lOh4gqe2v7NMGS33jrulfNqYFDjjEbhpDEHR5VTxgYNQSBqBlJIsBJW3uEYDgD6kvMnrrhGzq8g==", - "dev": true + "version": "7.10.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.14.tgz", + "integrity": "sha512-29GS75BE8asnTno3yB6ubOJOO0FboExEqNJy4bpz0GSmW/8wPTNL4h9h63c6s1uTrOopCmJYe/4yJLh5r92ZUA==" }, "node_modules/@umbraco/json-models-builders": { "version": "1.0.6", @@ -137,10 +136,12 @@ } }, "node_modules/@umbraco/playwright-testhelpers": { - "version": "2.0.0-beta.2", - "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.2.tgz", - "integrity": "sha512-l3oTEYOgvdCnmFfIcJBzHhwVvp31JvnD8GSNxpWabFBTg6Ov5ZTdU9MaUhuEUdwMdmGdligh20X6zyDoal2eJQ==", + "version": "2.0.0-beta.4", + "resolved": "file:../../../LogViewerHelpers/umbraco-playwright-testhelpers-2.0.0-beta.4.tgz", + "integrity": "sha512-Ea0U9BdtKI1hHECUl5F8qny2NKcQ75MJHC/FblauzejjXvE9lIAXzkhcqoZl7vxlVgF/Ihz5nBNuEYQ4HMI5lg==", + "license": "MIT", "dependencies": { + "@types/node": "^7.0.5", "@umbraco/json-models-builders": "^1.0.6", "camelize": "^1.0.0", "faker": "^4.1.0", @@ -220,9 +221,12 @@ } }, "node_modules/camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/clean-stack": { "version": "2.2.0", @@ -1002,718 +1006,5 @@ "node": ">= 6" } } - }, - "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true - }, - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@playwright/test": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.38.0.tgz", - "integrity": "sha512-xis/RXXsLxwThKnlIXouxmIvvT3zvQj1JE39GsNieMUrMpb3/GySHDh2j8itCG22qKVD4MYLBp7xB73cUW/UUw==", - "dev": true, - "requires": { - "playwright": "1.38.0" - } - }, - "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, - "@types/node": { - "version": "14.17.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.33.tgz", - "integrity": "sha512-noEeJ06zbn3lOh4gqe2v7NMGS33jrulfNqYFDjjEbhpDEHR5VTxgYNQSBqBlJIsBJW3uEYDgD6kvMnrrhGzq8g==", - "dev": true - }, - "@umbraco/json-models-builders": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@umbraco/json-models-builders/-/json-models-builders-1.0.6.tgz", - "integrity": "sha512-bXwfXcpuqG1Ye714L9KJEGXuSzJfckysE/6CuPjdG8FqHWTE1brv28teR2oMw+ih8ca2u2zUboRgdzLEU/1D3Q==", - "requires": { - "camelize": "^1.0.0", - "faker": "^4.1.0" - } - }, - "@umbraco/playwright-testhelpers": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-1.0.25.tgz", - "integrity": "sha512-6H452J6LhP0EHjF4jR7V7i0U8WPTiAbSyhN1J459BbbYEJ4QX1A2ZlCdA6VSBAsK1xYdMXD+yxsVJq7AAwiy9A==", - "requires": { - "@umbraco/json-models-builders": "^1.0.6", - "camelize": "^1.0.0", - "faker": "^4.1.0", - "form-data": "^4.0.0", - "node-fetch": "^2.6.7", - "xhr2": "^0.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dev": true, - "requires": { - "follow-redirects": "^1.14.7" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==", - "dev": true - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dev": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dotenv": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", - "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", - "dev": true - }, - "faker": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz", - "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=" - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "joi": { - "version": "17.6.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.3.tgz", - "integrity": "sha512-YlQsIaS9MHYekzf1Qe11LjTkNzx9qhYluK3172z38RxYoAUf82XMX1p1DG1H4Wtk2ED/vPdSn9OggqtDu+aTow==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "requires": { - "mime-db": "1.51.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "dev": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "playwright": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.38.0.tgz", - "integrity": "sha512-fJGw+HO0YY+fU/F1N57DMO+TmXHTrmr905J05zwAQE9xkuwP/QLDk63rVhmyxh03dYnEhnRbsdbH9B0UVVRB3A==", - "dev": true, - "requires": { - "fsevents": "2.3.2", - "playwright-core": "1.38.0" - } - }, - "playwright-core": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.0.tgz", - "integrity": "sha512-f8z1y8J9zvmHoEhKgspmCvOExF2XdcxMW8jNRuX4vkQFrzV4MlZ55iwb5QeyiFQgOFCUolXiRHgpjSEnqvO48g==", - "dev": true - }, - "prompt": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.3.0.tgz", - "integrity": "sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "async": "3.2.3", - "read": "1.0.x", - "revalidator": "0.1.x", - "winston": "2.x" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "revalidator": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "typescript": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", - "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", - "dev": true - }, - "wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "dev": true, - "requires": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "winston": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.6.tgz", - "integrity": "sha512-J5Zu4p0tojLde8mIOyDSsmLmcP8I3Z6wtwpTDHx1+hGcdhxcJaAmG4CFtagkb+NiN1M9Ek4b42pzMWqfc9jm8w==", - "dev": true, - "requires": { - "async": "^3.2.3", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "xhr2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", - "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==" - } } } diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index 5d861a0ae6..676e1e90e8 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -11,8 +11,6 @@ }, "devDependencies": { "@playwright/test": "^1.38", - "typescript": "^4.8.3", - "tslib": "^2.4.0", "del": "^6.0.0", "ncp": "^2.0.0", "prompt": "^1.2.0", @@ -22,7 +20,7 @@ }, "dependencies": { "@umbraco/json-models-builders": "^1.0.6", - "@umbraco/playwright-testhelpers": "2.0.0-beta.2", + "@umbraco/playwright-testhelpers": "2.0.0-beta.4", "camelize": "^1.0.0", "dotenv": "^16.3.1", "faker": "^4.1.0", diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/AllowEditInvariantFromNonDefault=False/allowEditInvariantFromNonDefault=False.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/AllowEditInvariantFromNonDefault=False/allowEditInvariantFromNonDefault=False.spec.ts deleted file mode 100644 index d4404cbb3e..0000000000 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/AllowEditInvariantFromNonDefault=False/allowEditInvariantFromNonDefault=False.spec.ts +++ /dev/null @@ -1,123 +0,0 @@ -import {AliasHelper, ApiHelpers, test} from '@umbraco/playwright-testhelpers'; -import {expect} from "@playwright/test"; -import {ContentBuilder, DocumentTypeBuilder, MacroBuilder, PartialViewMacroBuilder} from "@umbraco/playwright-models"; - -test.describe('Test for AllowEditInvariantFromNonDefault=False', () => { - const rootDocTypeName = 'TestDocument'; - const languageEn = 'en-US'; - const languageDa = 'da'; - - test.beforeEach(async ({page, umbracoApi}) => { - await umbracoApi.login(); - await umbracoApi.content.deleteAllContent(); - await umbracoApi.documentTypes.ensureNameNotExists(rootDocTypeName); - await umbracoApi.languages.ensureCultureNotExists(languageDa); - await umbracoApi.templates.ensureNameNotExists(rootDocTypeName); - }); - - test.afterEach(async ({page, umbracoApi}) => { - await umbracoApi.content.deleteAllContent(); - await umbracoApi.documentTypes.ensureNameNotExists(rootDocTypeName); - await umbracoApi.languages.ensureCultureNotExists(languageDa); - await umbracoApi.templates.ensureNameNotExists(rootDocTypeName); - }); - - async function createDocWithCultureVariationWithContent(umbracoApi, name, alias, language1, language2, value, isPublished){ - const rootDocType = new DocumentTypeBuilder() - .withName(name) - .withAlias(alias) - .withAllowAsRoot(true) - .withAllowCultureVariation(true) - .withDefaultTemplate(alias) - .addGroup() - .withName("Content") - .addTextBoxProperty() - .withLabel("Title") - .withAlias("title") - .done() - .done() - .build(); - - await umbracoApi.documentTypes.save(rootDocType).then(async (generatedRootDocType) => { - const childContentNode = new ContentBuilder() - .withContentTypeAlias(generatedRootDocType["alias"]) - .withAction("publishNew") - .addVariant() - .withCulture(language1) - .withName(language1) - .withSave(true) - .withPublish(isPublished) - .addProperty() - .withAlias("title") - .withValue(value) - .done() - .done() - .addVariant() - .withCulture(language2) - .withName(language2) - .withSave(true) - .withPublish(isPublished) - .done() - .build(); - - await umbracoApi.content.save(childContentNode); - }); - } - - test('No edit button for content when language changed', async ({page, umbracoApi, umbracoUi}) => { - const alias = AliasHelper.toAlias(rootDocTypeName); - - await umbracoApi.languages.createLanguage(languageDa, false, 1); - await createDocWithCultureVariationWithContent(umbracoApi, rootDocTypeName, alias, languageEn, languageDa, "", false); - - await umbracoUi.refreshContentTree(); - await page.locator('[data-element="tree-item-' + languageEn + '"]').click(); - await page.locator('.umb-variant-switcher__toggle').click(); - await page.locator('.umb-variant-switcher__name-wrapper', {hasText: "Danish"}).click(); - - // Assert - await expect(await page.locator('.umb-property-editor__lock-overlay')).not.toBeVisible(); - - // Cleaned - }); - - test('Updating value and publishing non-default language only without saving default should not update value', async ({page, umbracoApi, umbracoUi}) => { - const text = 'USA'; - const updatedText = 'DENMARK'; - const endpoint = '/'; - const alias = AliasHelper.toAlias(rootDocTypeName); - - await umbracoApi.languages.createLanguage(languageDa, false, 1); - await createDocWithCultureVariationWithContent(umbracoApi, rootDocTypeName, alias, languageEn, languageDa, text, true); - await umbracoApi.templates.edit(rootDocTypeName, `@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage - @{ - Layout = null; - } - @{ - if (Model.HasValue("title")){ - @(Model.Value("title")) - } - } ` - ); - const contentId = await umbracoApi.content.getContentId(languageEn); - const langId = await umbracoApi.languages.getLanguageId(languageDa); - await umbracoApi.domain.createDomain(endpoint, contentId, langId); - - await umbracoUi.refreshContentTree(); - await page.locator('[data-element="tree-item-' + languageEn + '"]').click(); - await page.locator('.umb-variant-switcher__toggle').click(); - await page.locator('.umb-variant-switcher__name-wrapper', {hasText: "Danish"}).hover(); - await page.locator('[role="button"]', {hasText: "Open in split view"}).click(); - - await page.locator('.umb-split-view', {hasText: languageEn}).locator('[name="textbox"]').fill(updatedText); - await page.locator('[label-key="buttons_morePublishingOptions"]').click(); - await page.locator('.umb-list-item', {hasText: "English"}).locator('.umb-form-check__check').click(); - await page.locator('[alias="overlaySubmit"]').click(); - - // Assert - await page.waitForTimeout(500); - await expect(await umbracoApi.content.verifyRenderedContent(endpoint, text, true)).toBeTruthy(); - - // Cleaned - }); -}); \ No newline at end of file diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/AllowEditInvariantFromNonDefault=False/appsettings.json b/tests/Umbraco.Tests.AcceptanceTest/tests/AllowEditInvariantFromNonDefault=False/appsettings.json deleted file mode 100644 index 7c5ae11742..0000000000 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/AllowEditInvariantFromNonDefault=False/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Umbraco": { - "CMS": { - "Content": { - "AllowEditInvariantFromNonDefault": false - } - } - } -} \ No newline at end of file diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/LogViewer/LogViewer.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/LogViewer/LogViewer.spec.ts new file mode 100644 index 0000000000..2931d3789e --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/LogViewer/LogViewer.spec.ts @@ -0,0 +1,208 @@ +import {test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +test.describe('Log Viewer tests', () => { + + test('can search', async ({page, umbracoApi, umbracoUi, request}) => { + // Arrange + const startTelemetryLevel = await umbracoApi.telemetry.getLevel(); + const telemetryLevel = "Minimal"; + await umbracoApi.telemetry.setLevel(telemetryLevel); + + // Act + await page.goto(umbracoApi.baseUrl + '/umbraco'); + await umbracoUi.goToSettingsTreeItem('Log Viewer'); + await page.getByRole('tab', {name: 'Search'}).click({force: true}); + await page.getByPlaceholder('Search logs...').fill(telemetryLevel); + + // Assert + // Checks if there is a log with the telemetry level to minimal + await expect(page.getByRole('group').first()).toContainText('Telemetry level set to "' + telemetryLevel + '"'); + + // Clean + await umbracoApi.telemetry.setLevel(startTelemetryLevel); + }); + + test('can change the search log level', async ({page, umbracoApi, umbracoUi}) => { + // Arrange + const logInformation = await umbracoApi.logViewer.getLevelCount(); + const expectedLogCount = Math.min(logInformation.information, 100); + + // Act + await page.goto(umbracoApi.baseUrl + '/umbraco'); + await umbracoUi.goToSettingsTreeItem('Log Viewer'); + await page.getByRole('tab', {name: 'Search'}).click({force: true}); + await page.getByRole('button', {name: 'Select log levels'}).click(); + await page.locator('.log-level-menu-item').getByText('Information').click(); + + // Assert + // Check if the search log level indicator is visible + await expect(page.locator('.log-level-button-indicator', {hasText: 'Information'})).toBeVisible(); + // Check if the log count matches the expected count + await expect(page.locator('umb-log-viewer-message').locator('umb-log-viewer-level-tag', {hasText: 'Information'})).toHaveCount(expectedLogCount); + }); + + test('can create a saved search', async ({page, umbracoApi, umbracoUi}) => { + // Arrange + const searchName = 'Test'; + const search = 'Acquiring MainDom'; + await umbracoApi.logViewer.deleteSavedSearch(searchName); + + // Act + await page.goto(umbracoApi.baseUrl + '/umbraco'); + await umbracoUi.goToSettingsTreeItem('Log Viewer'); + await page.getByRole('tab', {name: 'Search'}).click({force: true}); + await page.getByPlaceholder('Search logs...').fill(search); + await page.getByLabel("Save search").click({force: true}); + await page.getByLabel("Search name").fill(searchName); + await page.locator('uui-dialog-layout').getByLabel("Save search").click(); + + // Assert + // Checks if the saved search is visible in the UI + await page.getByRole('tab', {name: 'Overview'}).click({force: true}); + await expect(page.locator('#saved-searches').getByLabel(searchName, {exact: true})).toBeVisible(); + expect(umbracoApi.logViewer.doesSavedSearchExist(searchName)).toBeTruthy(); + + // Clean + await umbracoApi.logViewer.deleteSavedSearch(searchName); + }); + + test('can create a complex saved search', async ({page, umbracoApi, umbracoUi}) => { + // Arrange + const searchName = 'ComplexTest'; + const search = "@Level='Fatal' or @Level='Error' or @Level='Warning'"; + await umbracoApi.logViewer.deleteSavedSearch(searchName); + const logInformation = await umbracoApi.logViewer.getLevelCount(); + const expectedLogCountFatal = logInformation.fatal; + const expectedLogCountError = logInformation.error; + const expectedLogCountWarning = logInformation.warning; + + // Act + await page.goto(umbracoApi.baseUrl + '/umbraco'); + await umbracoUi.goToSettingsTreeItem('Log Viewer'); + await page.getByRole('tab', {name: 'Search'}).click({force: true}); + await page.getByPlaceholder('Search logs...').fill(search); + // Checks if the complex search works before saving it. + await expect(page.locator('umb-log-viewer-message').locator('umb-log-viewer-level-tag', {hasText: 'Fatal'})).toHaveCount(expectedLogCountFatal); + await expect(page.locator('umb-log-viewer-message').locator('umb-log-viewer-level-tag', {hasText: 'Error'})).toHaveCount(expectedLogCountError); + await expect(page.locator('umb-log-viewer-message').locator('umb-log-viewer-level-tag', {hasText: 'Warning'})).toHaveCount(expectedLogCountWarning); + await page.getByLabel("Save search").click({force: true}); + await page.getByLabel("Search name").fill(searchName); + await page.locator('uui-dialog-layout').getByLabel("Save search").click(); + + // Assert + // Checks if the saved search is visible in the UI + await page.getByRole('tab', {name: 'Overview'}).click({force: true}); + await expect(page.locator('#saved-searches').getByLabel(searchName)).toBeVisible(); + expect(umbracoApi.logViewer.doesSavedSearchExist(searchName)).toBeTruthy(); + + // Clean + await umbracoApi.logViewer.deleteSavedSearch(searchName); + }); + + test('can delete a saved search', async ({page, umbracoApi, umbracoUi}) => { + // Arrange + const searchName = 'ToBeDeletedSearchName'; + const search = 'Acquiring MainDom'; + await umbracoApi.logViewer.deleteSavedSearch(searchName); + await umbracoApi.logViewer.createSavedSearch(searchName, search); + + // Act + await page.goto(umbracoApi.baseUrl + '/umbraco'); + await umbracoUi.goToSettingsTreeItem('Log Viewer'); + await page.getByRole('tab', {name: 'Search'}).click({force: true}); + await page.getByLabel('Saved searches').click(); + await page.locator('li').filter({hasText: searchName + ' ' + search}).getByLabel('Remove saved search').click({force: true}); + + // Assert + // Checks if the saved search is visible in the UI + await page.getByRole('tab', {name: 'Overview'}).click({force: true}); + await expect(page.locator('#saved-searches').getByLabel(searchName)).not.toBeVisible(); + expect(await umbracoApi.logViewer.doesSavedSearchExist(searchName)).toBeFalsy(); + }); + + test('can expand a log entry', async ({page, umbracoApi, umbracoUi}) => { + // Arrange + const search = "@MessageTemplate='Acquiring MainDom.'"; + + // Act + await page.goto(umbracoApi.baseUrl + '/umbraco'); + await umbracoUi.goToSettingsTreeItem('Log Viewer'); + await page.getByRole('tab', {name: 'Search'}).click({force: true}); + await page.getByPlaceholder('Search logs...').fill(search); + await page.getByRole('group').locator('#message').first().click(); + + // Assert + await expect(page.getByRole('list').getByText('Acquiring MainDom.')).toBeVisible(); + }); + + // Currently only works if the user is using the locale 'en-US' otherwise it will fail + test('can sort logs by timestamp', async ({page, umbracoApi, umbracoUi}) => { + // Arrange + const locale = 'en-US'; + const options: Intl.DateTimeFormatOptions = { + year: 'numeric', + month: 'numeric', + day: 'numeric', + hour: 'numeric', + minute: 'numeric', + second: 'numeric', + hour12: true, + }; + + //Act + await page.goto(umbracoApi.baseUrl + '/umbraco'); + await umbracoUi.goToSettingsTreeItem('Log Viewer'); + await page.getByRole('tab', {name: 'Search'}).click({force: true}); + // Sorts logs by timestamp + await page.getByLabel('Sort logs').click(); + // Gets the last log from the log viewer + const lastLog = await umbracoApi.logViewer.getLog(0, 1, "Descending"); + const dateToFormat = new Date(lastLog.items[0].timestamp); + const lastLogTimestamp = new Intl.DateTimeFormat(locale, options).format(dateToFormat); + + // Assert + await expect(page.locator('umb-log-viewer-message').locator('[id="timestamp"]').first()).toContainText(lastLogTimestamp); + }); + + // Will fail if there is not enough logs. + test('can use pagination', async ({page, umbracoApi, umbracoUi}) => { + // Arrange + const secondPageLogs = await umbracoApi.logViewer.getLog(100, 100, 'Ascending'); + const firstLogOnSecondPage = secondPageLogs.items[0].renderedMessage; + + // Act + await page.goto(umbracoApi.baseUrl + '/umbraco'); + await umbracoUi.goToSettingsTreeItem('Log Viewer'); + await page.getByRole('tab', {name: 'Search'}).click({force: true}); + await page.getByLabel('Go to page 2', {exact: true}).click(); + + // Assert + await expect(page.locator('umb-log-viewer-message').locator('[id="message"]').first()).toContainText(firstLogOnSecondPage); + // TODO: Remove the comment below when the issue is resolved. + // At the time this test was created, the UI only highlights page 1. Uncomment the line below when the issue is resolved. + // await expect(page.getByLabel('Pagination navigation. Current page: 2.', {exact: true})).toBeVisible(); + }); + + test('can use a saved search', async ({page, umbracoApi, umbracoUi}) => { + // Arrange + const searchName = 'TestSearch'; + const search = "StartsWith(@MessageTemplate, 'Acquiring MainDom.')"; + await umbracoApi.logViewer.deleteSavedSearch(searchName); + await umbracoApi.logViewer.createSavedSearch(searchName, search); + + // Act + await page.goto(umbracoApi.baseUrl + '/umbraco'); + await umbracoUi.goToSettingsTreeItem('Log Viewer'); + await page.locator('#saved-searches').getByLabel(searchName).click(); + + // Assert + // Checks if the search has the correct search value + await expect(page.getByPlaceholder('Search logs...')).toHaveValue(search); + // Checks if the saved search found the correct logs + await expect(page.getByRole('group').locator('#message', {hasText: 'Acquiring MainDom.'}).first()).toBeVisible(); + + // Clean + await umbracoApi.logViewer.deleteSavedSearch(searchName); + }); +}); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Telemetry.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Telemetry.spec.ts index 502d8c24b4..1738bd212a 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Telemetry.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Telemetry.spec.ts @@ -25,8 +25,8 @@ test.describe('Telemetry tests', () => { // Assert // UI await page.reload(); - await expect(await page.locator('[name="telemetryLevel"] >> input[id=input]')).toHaveValue('1'); + await expect(page.locator('[name="telemetryLevel"] >> input[id=input]')).toHaveValue('1'); // API - await expect(await umbracoApi.telemetry.checkLevel(expectedLevel)).toBeTruthy(); + expect(await umbracoApi.telemetry.getLevel() == "Minimal").toBeTruthy(); }); }); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultUILanguage/appsettings.json b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultUILanguage/appsettings.json deleted file mode 100644 index d0de42cebf..0000000000 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultUILanguage/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Umbraco": { - "CMS": { - "Global": { - "DefaultUILanguage": "da-DK" - } - } - } -} \ No newline at end of file diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultUILanguage/editDefaultUILanguage.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultUILanguage/editDefaultUILanguage.spec.ts deleted file mode 100644 index 8ef1e0c0b7..0000000000 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultUILanguage/editDefaultUILanguage.spec.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; -import {expect} from "@playwright/test"; -import {UserBuilder} from '@umbraco/playwright-models'; - -test.describe('DefaultUILanguage', () => { - - test.beforeEach(async ({page, umbracoApi}) => { - await umbracoApi.login(); - }); - - test('DefaultUiLanguage da-DK', async ({page, umbracoApi, umbracoUi}) => { - const name = "test"; - const email = "Test@email.com"; - const userGroup = ["editor"]; - const language = "da-DK"; - - await umbracoApi.users.ensureEmailNotExits(email); - - const user = new UserBuilder() - .withName(name) - .withEmail(email) - .withUserGroup(userGroup) - .build() - await umbracoApi.users.postCreateUser(user); - - await page.locator('[data-element="section-users"]').click(); - await page.locator('.umb-user-card__content', {hasText: name}).click(); - - // Assert - await expect(await page.locator('[value="string:' + language + '"][selected="selected"]')).toHaveCount(1); - - // Clean - await umbracoApi.users.ensureEmailNotExits(email); - }); -}); - diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/EnableTours=False/appsettings.json b/tests/Umbraco.Tests.AcceptanceTest/tests/EnableTours=False/appsettings.json deleted file mode 100644 index 7a2afd43d4..0000000000 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/EnableTours=False/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Umbraco": { - "CMS": { - "Tours": { - "EnableTours": false - } - } - } -} \ No newline at end of file diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/EnableTours=False/toursTest.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/EnableTours=False/toursTest.spec.ts deleted file mode 100644 index ae5c09bf0b..0000000000 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/EnableTours=False/toursTest.spec.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {test} from '@umbraco/playwright-testhelpers'; -import {expect} from "@playwright/test"; -import {umbracoConfig} from "../../umbraco.config"; - -test.describe('Test', () => { - - test.beforeEach(async ({page, umbracoApi}) => { - await umbracoApi.login(true); - }); - - test('Check if tours exist', async ({page, umbracoApi, umbracoUi}) => { - // Need to go to the correct page when I set skipCheckTours in login to true - await page.goto(umbracoConfig.environment.baseUrl + '/umbraco'); - await page.locator('[data-element="global-help"]').click(); - // Assert - await expect(await page.locator('[data-element="help-tours"]')).not.toBeVisible(); - }); - -}); \ No newline at end of file diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/auth.setup.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/auth.setup.ts index 59655599dc..dc69f40e40 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/auth.setup.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/auth.setup.ts @@ -1,18 +1,17 @@ -import {test as setup, expect, Page} from '@playwright/test'; +import {test as setup, expect} from '@playwright/test'; import {STORAGE_STATE} from '../playwright.config' +import {UiHelpers} from "@umbraco/playwright-testhelpers"; -// Update this setup with test ids in the future. Maybe also find better locators in general setup('authenticate', async ({page}) => { - await page.goto(process.env.URL + '/umbraco'); + const umbracoUi = new UiHelpers(page); - await page.getByRole('textbox', { name: 'Email' }).fill(process.env.UMBRACO_USER_LOGIN); - await page.getByRole('textbox', { name: 'Password' }).fill(process.env.UMBRACO_USER_PASSWORD); + await page.goto(process.env.URL + '/umbraco'); + await page.getByLabel('Email').fill(process.env.UMBRACO_USER_LOGIN); + await page.getByLabel( 'Password', {exact: true}).fill(process.env.UMBRACO_USER_PASSWORD); await page.getByRole('button', {name: 'Login'}).click(); - await page.waitForURL(process.env.URL + '/umbraco'); - // Assert - await expect(page.getByRole('tab', { name: 'Settings' })).toBeVisible(); - + await expect(page.getByRole('tab', {name: 'Settings'})).toBeVisible(); + await umbracoUi.goToSection('Settings'); await page.context().storageState({path: STORAGE_STATE}); });