diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 19aac6e3..5b342337 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -16,6 +16,7 @@ "http-status-codes": "^2.2.0", "lodash": "^4.17.21", "moment": "^2.29.4", + "msw": "^2.1.5", "pinia": "^2.1.6", "regenerator-runtime": "^0.14.0", "rfdc": "^1.3.0", @@ -583,6 +584,30 @@ "integrity": "sha512-e//lmkmpFUMZKhmCY9zdjRe4zNXfbOIJnn6xveHbaV2kSw5aJ5dLXUxcRt1Gxfi7ZYpFLUWlkG2MGSFAiqAu7w==", "dev": true }, + "node_modules/@mswjs/cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-1.1.0.tgz", + "integrity": "sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@mswjs/interceptors": { + "version": "0.25.15", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.25.15.tgz", + "integrity": "sha512-s4jdyxmq1eeftfDXJ7MUiK/jlvYaU8Sr75+42hHCVBrYez0k51RHbMitKIKdmsF92Q6gwhp8Sm1MmvdA9llpcg==", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.2.1", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -624,6 +649,25 @@ "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", "dev": true }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==" + }, "node_modules/@pinia/testing": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@pinia/testing/-/testing-0.1.3.tgz", @@ -692,6 +736,11 @@ "@types/chai": "*" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + }, "node_modules/@types/eslint": { "version": "8.44.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", @@ -729,6 +778,11 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.4.tgz", "integrity": "sha512-Y9vbIAoM31djQZrPYjpTLo0XlaSwOIsrlfE3LpulZeRblttsLQRFRlBAppW0LOxyT3ALj2M5vU1ucQQayQH3jA==" }, + "node_modules/@types/statuses": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.4.tgz", + "integrity": "sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw==" + }, "node_modules/@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -1295,11 +1349,35 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -1308,7 +1386,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -1367,6 +1444,25 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1375,6 +1471,16 @@ "node": ">=8" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -1434,6 +1540,29 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1500,7 +1629,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1512,6 +1640,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, "node_modules/check-error": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", @@ -1570,11 +1703,77 @@ "node": ">=6.0" } }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/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, "dependencies": { "color-name": "~1.1.4" }, @@ -1585,8 +1784,7 @@ "node_modules/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -1626,6 +1824,14 @@ "proto-list": "~1.2.1" } }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1697,6 +1903,17 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1783,6 +2000,11 @@ "integrity": "sha512-P38NO8eOuWOKY1sQk5yE0crNtrjgjJj6r3NrbIKtG18KzCHmHE2Bt+aQA7/y0w3uYsHWxDa6icOohzjLJ4vJ4A==", "peer": true }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "node_modules/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -1854,7 +2076,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "peer": true, "engines": { "node": ">=6" } @@ -2057,6 +2278,30 @@ "node": ">=0.8.x" } }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2082,6 +2327,28 @@ "reusify": "^1.0.4" } }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2207,6 +2474,14 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-func-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", @@ -2281,6 +2556,14 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, "node_modules/happy-dom": { "version": "12.8.0", "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-12.8.0.tgz", @@ -2303,6 +2586,11 @@ "node": ">=8" } }, + "node_modules/headers-polyfill": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.2.tgz", + "integrity": "sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==" + }, "node_modules/http-status-codes": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.2.0.tgz", @@ -2320,6 +2608,25 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -2372,8 +2679,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", @@ -2381,6 +2687,31 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2400,6 +2731,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2411,6 +2750,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2428,6 +2780,17 @@ "node": ">=8" } }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2618,6 +2981,21 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/loupe": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", @@ -2697,6 +3075,14 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2734,6 +3120,66 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/msw": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.1.5.tgz", + "integrity": "sha512-r39AZk4taMmUEYwtzDAgFy38feqJy1yaKykvo0QE8q7H7c28yH/WIlOmE7oatjkC3dMgpTYfND8MaxeywgU+Yg==", + "hasInstallScript": true, + "dependencies": { + "@bundled-es-modules/cookie": "^2.0.0", + "@bundled-es-modules/statuses": "^1.0.1", + "@mswjs/cookies": "^1.1.0", + "@mswjs/interceptors": "^0.25.15", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "chalk": "^4.1.2", + "chokidar": "^3.4.2", + "graphql": "^16.8.1", + "headers-polyfill": "^4.0.2", + "inquirer": "^8.2.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.2", + "path-to-regexp": "^6.2.0", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.9.0", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.7.x <= 5.3.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/msw/node_modules/type-fest": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -2812,6 +3258,20 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -2829,6 +3289,41 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/outvariant": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.2.tgz", + "integrity": "sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==" + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -2905,6 +3400,11 @@ "node": ">=8" } }, + "node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + }, "node_modules/pathe": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", @@ -3200,6 +3700,19 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3216,6 +3729,14 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3225,6 +3746,18 @@ "node": ">=4" } }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -3270,6 +3803,14 @@ "fsevents": "~2.3.2" } }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3293,6 +3834,14 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -3310,14 +3859,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "peer": true + ] }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { "version": "1.66.1", @@ -3440,6 +3987,11 @@ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3473,17 +4025,50 @@ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/std-env": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", "dev": true }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3519,7 +4104,6 @@ "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, "dependencies": { "has-flag": "^4.0.0" }, @@ -3594,6 +4178,11 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, "node_modules/tinybench": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", @@ -3618,6 +4207,17 @@ "node": ">=14.0.0" } }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3629,6 +4229,11 @@ "node": ">=8.0" } }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3718,8 +4323,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/uuid": { "version": "8.3.2", @@ -4030,6 +4634,14 @@ "node": ">=10.13.0" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -4169,6 +4781,19 @@ "node": ">=8" } }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -4184,12 +4809,45 @@ "node": ">=12" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -4492,6 +5150,24 @@ "integrity": "sha512-e//lmkmpFUMZKhmCY9zdjRe4zNXfbOIJnn6xveHbaV2kSw5aJ5dLXUxcRt1Gxfi7ZYpFLUWlkG2MGSFAiqAu7w==", "dev": true }, + "@mswjs/cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-1.1.0.tgz", + "integrity": "sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==" + }, + "@mswjs/interceptors": { + "version": "0.25.15", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.25.15.tgz", + "integrity": "sha512-s4jdyxmq1eeftfDXJ7MUiK/jlvYaU8Sr75+42hHCVBrYez0k51RHbMitKIKdmsF92Q6gwhp8Sm1MmvdA9llpcg==", + "requires": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.2.1", + "strict-event-emitter": "^0.5.1" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4524,6 +5200,25 @@ "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", "dev": true }, + "@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==" + }, + "@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "requires": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==" + }, "@pinia/testing": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@pinia/testing/-/testing-0.1.3.tgz", @@ -4569,6 +5264,11 @@ "@types/chai": "*" } }, + "@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + }, "@types/eslint": { "version": "8.44.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", @@ -4606,6 +5306,11 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.4.tgz", "integrity": "sha512-Y9vbIAoM31djQZrPYjpTLo0XlaSwOIsrlfE3LpulZeRblttsLQRFRlBAppW0LOxyT3ALj2M5vU1ucQQayQH3jA==" }, + "@types/statuses": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.4.tgz", + "integrity": "sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw==" + }, "@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -5063,17 +5768,30 @@ "peer": true, "requires": {} }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } + } + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "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" } @@ -5120,11 +5838,26 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -5161,6 +5894,15 @@ "update-browserslist-db": "^1.0.11" } }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -5204,12 +5946,16 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, "check-error": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", @@ -5250,11 +5996,55 @@ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "peer": true }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==" + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + }, "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" } @@ -5262,8 +6052,7 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "combined-stream": { "version": "1.0.8", @@ -5300,6 +6089,11 @@ "proto-list": "~1.2.1" } }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5351,6 +6145,14 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "requires": { + "clone": "^1.0.2" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -5415,6 +6217,11 @@ "integrity": "sha512-P38NO8eOuWOKY1sQk5yE0crNtrjgjJj6r3NrbIKtG18KzCHmHE2Bt+aQA7/y0w3uYsHWxDa6icOohzjLJ4vJ4A==", "peer": true }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -5469,8 +6276,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "peer": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-string-regexp": { "version": "4.0.0", @@ -5611,6 +6417,26 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "peer": true }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -5636,6 +6462,21 @@ "reusify": "^1.0.4" } }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + } + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -5716,6 +6557,11 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "optional": true }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, "get-func-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", @@ -5772,6 +6618,11 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==" + }, "happy-dom": { "version": "12.8.0", "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-12.8.0.tgz", @@ -5791,6 +6642,11 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "headers-polyfill": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.2.tgz", + "integrity": "sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==" + }, "http-status-codes": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.2.0.tgz", @@ -5805,6 +6661,11 @@ "safer-buffer": ">= 2.1.2 < 3.0.0" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -5845,8 +6706,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.8", @@ -5854,6 +6714,28 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + } + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -5867,6 +6749,11 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -5875,6 +6762,16 @@ "is-extglob": "^2.1.1" } }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + }, + "is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==" + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -5886,6 +6783,11 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6033,6 +6935,15 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, "loupe": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", @@ -6093,6 +7004,11 @@ "mime-db": "1.52.0" } }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -6124,6 +7040,43 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "msw": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.1.5.tgz", + "integrity": "sha512-r39AZk4taMmUEYwtzDAgFy38feqJy1yaKykvo0QE8q7H7c28yH/WIlOmE7oatjkC3dMgpTYfND8MaxeywgU+Yg==", + "requires": { + "@bundled-es-modules/cookie": "^2.0.0", + "@bundled-es-modules/statuses": "^1.0.1", + "@mswjs/cookies": "^1.1.0", + "@mswjs/interceptors": "^0.25.15", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "chalk": "^4.1.2", + "chokidar": "^3.4.2", + "graphql": "^16.8.1", + "headers-polyfill": "^4.0.2", + "inquirer": "^8.2.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.2", + "path-to-regexp": "^6.2.0", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.9.0", + "yargs": "^17.7.2" + }, + "dependencies": { + "type-fest": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==" + } + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, "nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -6178,6 +7131,14 @@ "wrappy": "1" } }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, "optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -6192,6 +7153,32 @@ "type-check": "^0.4.0" } }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + }, + "outvariant": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.2.tgz", + "integrity": "sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==" + }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -6241,6 +7228,11 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, + "path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + }, "pathe": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", @@ -6422,6 +7414,16 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6435,12 +7437,26 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -6469,6 +7485,11 @@ "fsevents": "~2.3.2" } }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6478,17 +7499,23 @@ "queue-microtask": "^1.2.2" } }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "requires": { + "tslib": "^2.1.0" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "peer": true + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { "version": "1.66.1", @@ -6558,6 +7585,11 @@ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6585,17 +7617,44 @@ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, "std-env": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", "dev": true }, + "strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -6619,7 +7678,6 @@ "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" } @@ -6661,6 +7719,11 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, "tinybench": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", @@ -6679,6 +7742,14 @@ "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", "dev": true }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -6687,6 +7758,11 @@ "is-number": "^7.0.0" } }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -6740,8 +7816,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "uuid": { "version": "8.3.2", @@ -6887,6 +7962,14 @@ "graceful-fs": "^4.1.2" } }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "requires": { + "defaults": "^1.0.3" + } + }, "webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -6983,6 +8066,16 @@ "stackback": "0.0.2" } }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -6995,12 +8088,36 @@ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 9cddc901..cb42fa4a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -21,6 +21,7 @@ "http-status-codes": "^2.2.0", "lodash": "^4.17.21", "moment": "^2.29.4", + "msw": "^2.1.5", "pinia": "^2.1.6", "regenerator-runtime": "^0.14.0", "rfdc": "^1.3.0", diff --git a/frontend/src/components/account-mgmt/EditFacilityContacts.vue b/frontend/src/components/account-mgmt/EditFacilityContacts.vue index 5836e9d1..82b05114 100644 --- a/frontend/src/components/account-mgmt/EditFacilityContacts.vue +++ b/frontend/src/components/account-mgmt/EditFacilityContacts.vue @@ -35,16 +35,12 @@ density="compact" variant="outlined" @update:modelValue="addContact" - :error-messages="errorMessage"> - + :error-messages="errorMessage"> - + @@ -99,24 +95,24 @@ export default { }, title: { type: String, - required: true + required: true, }, titleInfo: { type: String, - required: true + required: true, }, contacts: { type: Array, - required: true + required: true, }, contactsForAdd: { type: Array, - required: true + required: true, }, atLeastOneContactMandatory: { type: Boolean, required: false, - default: false + default: false, }, }, emits: ['save-contact-updates'], @@ -133,13 +129,10 @@ export default { headers: [ { title: 'Name', value: 'name', width: '20%' }, { title: 'Role', value: 'role', width: '30%' }, - { title: '', value: 'actions', width: '50%' } + { title: '', value: 'actions', width: '50%' }, ], errorMessage: '', - atLeastOneContactRules: [ - v => !!v || 'At least one expense authority is required for a facility.', - ], - + atLeastOneContactRules: [(v) => !!v || 'At least one expense authority is required for a facility.'], } }, computed: { @@ -201,10 +194,10 @@ export default { if (!this.contactId) { return } - const contactToAdd = this.contactsAvailableForAdd.find(item => item.contactId === this.contactId) + const contactToAdd = this.contactsAvailableForAdd.find((item) => item.contactId === this.contactId) this.contactsToDisplay.push(contactToAdd) this.updatedContactsToAdd.push(contactToAdd) - this.contactsAvailableForAdd = this.contactsAvailableForAdd.filter(obj => obj.contactId !== contactToAdd.contactId) + this.contactsAvailableForAdd = this.contactsAvailableForAdd.filter((obj) => obj.contactId !== contactToAdd.contactId) this.contactId = null this.removeFocus() }, @@ -213,7 +206,7 @@ export default { * Remove a contact from the list of contacts to display and add to the list of contacts available for add */ deleteContact(contact) { - this.contactsToDisplay = this.contactsToDisplay.filter(obj => obj.contactId !== contact.contactId) + this.contactsToDisplay = this.contactsToDisplay.filter((obj) => obj.contactId !== contact.contactId) this.updatedContactsToRemove.push(contact) this.contactsAvailableForAdd = [...this.contactsAvailableForAdd, contact] }, @@ -257,4 +250,3 @@ export default { }, } - diff --git a/frontend/src/components/messages/MessagesTab.vue b/frontend/src/components/messages/MessagesTab.vue index 1258253d..237ab5bb 100644 --- a/frontend/src/components/messages/MessagesTab.vue +++ b/frontend/src/components/messages/MessagesTab.vue @@ -4,7 +4,7 @@
- + mdi-email-plus-outline New message @@ -28,10 +28,10 @@ - + - + diff --git a/frontend/test/utils/mockResponses/app.js b/frontend/test/utils/mockResponses/app.js new file mode 100644 index 00000000..bba12b16 --- /dev/null +++ b/frontend/test/utils/mockResponses/app.js @@ -0,0 +1,94 @@ +export const getLookupInfoResponse = { + requestCategories: [ + { + categoryName: 'Intake & Renewal', + categoryId: '1e5bedc2-7377-ee11-8179-000d3a09d132', + }, + { + categoryName: 'Reporting', + categoryId: '01839dc9-7377-ee11-8179-000d3a09d132', + }, + { + categoryName: 'Account Maintenance', + categoryId: 'a640abcf-7377-ee11-8179-000d3a09d132', + }, + { + categoryName: 'Funding Agreement', + categoryId: '1eb0aad5-7377-ee11-8179-000d3a09d132', + }, + { + categoryName: 'Payments and Funding', + categoryId: 'aa2ba7e1-7377-ee11-8179-000d3a09d132', + }, + { + categoryName: 'Policy Question', + categoryId: '3a2ca7e1-7377-ee11-8179-000d3a09d132', + }, + { + categoryName: 'Technical Support', + categoryId: '4f749fe7-7377-ee11-8179-000d3a09d132', + }, + { + categoryName: 'Other', + categoryId: '64ce97ed-7377-ee11-8179-000d3a09d132', + }, + ], + userRoles: [ + { + id: 1, + description: 'Admin', + }, + { + id: 2, + description: 'Account Management', + }, + { + id: 3, + description: 'Financial', + }, + { + id: 4, + description: 'Reporting', + }, + ], + healthAuthorities: [ + { + id: 1, + description: 'Fraser Health', + }, + { + id: 2, + description: 'Interior Health', + }, + { + id: 3, + description: 'Island Health', + }, + { + id: 4, + description: 'Northern Health', + }, + { + id: 5, + description: 'Vancouver Coastal Health', + }, + ], + facilityTypes: [ + { + id: 1, + description: 'Rent/Lease', + }, + { + id: 2, + description: 'Owned With Mortgage', + }, + { + id: 3, + description: 'Owned Without Mortgage', + }, + { + id: 4, + description: 'Provided Free of Charge', + }, + ], +} diff --git a/frontend/test/utils/mockResponses/applications.js b/frontend/test/utils/mockResponses/applications.js new file mode 100644 index 00000000..a109924b --- /dev/null +++ b/frontend/test/utils/mockResponses/applications.js @@ -0,0 +1,81 @@ +export const getApplicationsResponse = [ + { + applicationId: '128b9ba9-be9e-ee11-a569-000d3a09d132', + referenceNumber: 'APP-23000066', + submittedDate: null, + ministryLastUpdated: '2023-12-22T20:40:48Z', + providerLastUpdated: '2023-12-22T20:35:45Z', + facilityId: 'c9ecef6c-437d-ee11-8179-000d3a09d132', + facilityName: 'Test OFM - Facility Number 1', + statusCode: 1, + stateCode: 0, + status: 'Draft', + latestActivity: '2023-12-22T20:40:48.000Z', + }, + { + applicationId: 'c8609cc5-0fa1-ee11-a569-000d3a09d499', + referenceNumber: 'APP-23000070', + submittedDate: null, + ministryLastUpdated: null, + providerLastUpdated: '2023-12-22T21:19:21Z', + facilityId: 'c9ecef6c-437d-ee11-8179-000d3a09d132', + facilityName: 'Test OFM - Facility Number 1', + statusCode: 1, + stateCode: 0, + status: 'Draft', + latestActivity: '2023-12-22T21:19:21.000Z', + }, + { + applicationId: 'b2b7f374-2995-ee11-be37-000d3a09d4d4', + referenceNumber: 'APP-23000031', + submittedDate: '2023-12-19T18:07:38Z', + ministryLastUpdated: '2023-12-19T18:07:38Z', + providerLastUpdated: null, + facilityId: 'c9ecef6c-437d-ee11-8179-000d3a09d132', + facilityName: 'Test OFM - Facility Number 1', + statusCode: 3, + stateCode: 0, + status: 'Submitted', + latestActivity: '2023-12-19T18:07:38.000Z', + }, +] + +export const getApplicationResponse = { + applicationId: 'b2b7f374-2995-ee11-be37-000d3a09d4d4', + referenceNumber: 'APP-23000031', + submittedDate: null, + ministryLastUpdated: null, + providerLastUpdated: '2024-01-31T20:00:58Z', + facilityId: 'c9ecef6c-437d-ee11-8179-000d3a09d132', + facilityName: 'Test OFM - Facility Number 1', + statusCode: 1, + stateCode: 0, + status: 'Draft', + staffingInfantECEducatorFullTime: 1, + staffingInfantECEducatorPartTime: 2, + staffingECEducatorFullTime: 3, + staffingECEducatorPartTime: 4, + staffingECEducatorAssistantFullTime: 5, + staffingECEducatorAssistantPartTime: 6, + staffingResponsibleAdultFullTime: 7, + staffingResponsibleAdultPartTime: 8, + primaryContactId: '7e35f2ba-9fb1-ee11-a569-000d3a09d4d4', + secondaryContactId: 'b4cc209f-edab-ee11-a569-000d3a09d699', + providerType: 1, + ownership: 2, + facilityType: 1, + insuranceCost: 0.3, + upkeepLabourCost: 4.13, + suppliesCost: 6.11, + utilitiesCost: 1.44, + maintenanceRepairsCost: 5.12, + furnitureEquipmentsCost: 1.46, + totalYearlyOperatingCosts: 18.56, + rentLeaseCost: 0, + mortgageCost: 0, + propertyTax: 0, + strataFee: 0, + applicableFee: 0, + totalYearlyFacilityCosts: 0, + latestActivity: '2024-01-31T20:00:58.000Z', +} diff --git a/frontend/test/utils/mockResponses/auth.js b/frontend/test/utils/mockResponses/auth.js new file mode 100644 index 00000000..c1a9dc06 --- /dev/null +++ b/frontend/test/utils/mockResponses/auth.js @@ -0,0 +1,47 @@ +export const getUserInfoResponse = { + displayName: 'ofmqa03', + userName: 'ofmqa03', + businessName: 'QA03, CCOF', + isMinistryUser: false, + serverTime: '2024-02-06T07:18:03.096Z', + unreadMessages: false, + facilities: [ + { + facilityId: 'c9ecef6c-437d-ee11-8179-000d3a09d132', + facilityAccountNumber: 'Test-Facility-1', + facilityName: 'Test OFM - Facility Number 1', + facilityType: 0, + facilityStateCode: 0, + facilityStatusCode: 1, + }, + { + facilityId: '6df8623a-447d-ee11-8179-000d3a09d499', + facilityAccountNumber: 'Test-Facility-2', + facilityName: 'Test OFM - Facility #2', + facilityType: 0, + facilityStateCode: 0, + facilityStatusCode: 1, + }, + { + facilityId: '064effc8-437d-ee11-8179-000d3a09d132', + facilityAccountNumber: 'Test-Facility-3', + facilityName: 'Test OFM - Facility Number 3', + facilityType: 0, + facilityStateCode: 0, + facilityStatusCode: 1, + }, + ], + contactId: 'dd2f008d-ff6d-ee11-8179-000d3a09d499', + userId: 'E1F829C63C33480B86A2C14B8FAF382C', + email: 'test@email.com', + firstName: 'Captain', + lastName: 'America', + role: 2, + phone: '604-555-1234', + organizationId: 'b26aeb95-427d-ee11-8179-000d3a09d132', + organizationAccountNumber: 'VL123456', + organizationAccountType: 100000000, + organizationName: 'Test OFM Organization', + organizationStateCode: 0, + organizationStatus: 1, +} diff --git a/frontend/test/utils/mockResponses/documents.js b/frontend/test/utils/mockResponses/documents.js new file mode 100644 index 00000000..371f773a --- /dev/null +++ b/frontend/test/utils/mockResponses/documents.js @@ -0,0 +1,42 @@ +export const getDocumentsResponse = [ + { + documentId: 'c659e942-2bc1-ee11-9079-000d3a09d132', + referenceNumber: 'DOC-2400000067', + fileName: 'anothercat.png', + subject: 'anothercat.png', + description: 'this is the cat', + statusCode: 1, + stateCode: 0, + lastUpdatedTime: '2024-02-01T17:56:50Z', + }, + { + documentId: 'ccb4f548-2bc1-ee11-9079-000d3a09d132', + referenceNumber: 'DOC-2400000068', + fileName: 'Random.pdf', + subject: 'Random.pdf', + description: 'random pdf file', + statusCode: 1, + stateCode: 0, + lastUpdatedTime: '2024-02-01T17:57:02Z', + }, + { + documentId: 'd0f37a8f-10c5-ee11-9079-000d3a09d4d4', + referenceNumber: 'DOC-2400000087', + fileName: 'blackbox.jpg', + subject: 'blackbox.jpg', + description: 'black box', + statusCode: 1, + stateCode: 0, + lastUpdatedTime: '2024-02-06T16:55:50Z', + }, + { + documentId: 'd5f37a8f-10c5-ee11-9079-000d3a09d4d4', + referenceNumber: 'DOC-2400000088', + fileName: 'random.xlsx', + subject: 'random.xlsx', + description: 'excel file', + statusCode: 1, + stateCode: 0, + lastUpdatedTime: '2024-02-06T16:55:50Z', + }, +] diff --git a/frontend/test/utils/mockResponses/facilities.js b/frontend/test/utils/mockResponses/facilities.js new file mode 100644 index 00000000..e443905f --- /dev/null +++ b/frontend/test/utils/mockResponses/facilities.js @@ -0,0 +1,73 @@ +export const getFacilityResponse = { + facilityId: 'c9ecef6c-437d-ee11-8179-000d3a09d132', + accountNumber: 'Test-Facility-1', + name: 'Test OFM Facility Number 1', + phoneLandline: '111-111-1111', + phoneCell: '999-999-9999', + email: 'test@gmail.com', + streetAddress1: '123 Random Street', + streetAddress2: '456 Street Address 2', + city: 'Victoria', + postalCode: 'V8V1V1', + province: 'BC', + isMailingAddressDifferent: true, + mailingStreetAddress1: '999 Mailing Address', + mailingStreetAddress2: '415 Mailing 2', + mailingCity: 'Vancouver', + mailingPostalCode: 'T2J3J3', + mailingProvince: 'BC', + stateCode: 0, + statusCode: 1, + primaryContactId: 'dd2f008d-ff6d-ee11-8179-000d3a09d499', +} + +export const getContactsResponse = [ + { + bceidFacilityId: '8d35f2ba-9fb1-ee11-a569-000d3a09d4d4', + facilityId: 'c9ecef6c-437d-ee11-8179-000d3a09d132', + facilityName: 'Test OFM - Facility Number 1', + stateCode: 0, + statusCode: 1, + isExpenseAuthority: true, + isAdditionalContact: false, + contactId: '7e35f2ba-9fb1-ee11-a569-000d3a09d4d4', + firstName: 'Iron', + lastName: 'Man', + email: 'test@user.com', + phone: '123-333-4444', + userName: 'TestOFMTest5', + role: 2, + }, + { + bceidFacilityId: 'bdcc209f-edab-ee11-a569-000d3a09d699', + facilityId: 'c9ecef6c-437d-ee11-8179-000d3a09d132', + facilityName: 'Test OFM - Facility Number 1', + stateCode: 0, + statusCode: 1, + isExpenseAuthority: false, + isAdditionalContact: true, + contactId: 'b4cc209f-edab-ee11-a569-000d3a09d699', + firstName: 'Black', + lastName: 'Widow', + email: 'test@gmail.com', + phone: '123-456-7899', + userName: 'TestOFMTest1', + role: 3, + }, + { + bceidFacilityId: 'b7808e68-9eb1-ee11-a569-000d3a09d699', + facilityId: 'c9ecef6c-437d-ee11-8179-000d3a09d132', + facilityName: 'Test OFM - Facility Number 1', + stateCode: 0, + statusCode: 1, + isExpenseAuthority: false, + isAdditionalContact: false, + contactId: 'dd2f008d-ff6d-ee11-8179-000d3a09d499', + firstName: 'Captain', + lastName: 'America', + email: 'test@user.com', + phone: '123-566-7899', + userName: 'TestOFMTest4', + role: 1, + }, +] diff --git a/frontend/test/utils/mockResponses/messages.js b/frontend/test/utils/mockResponses/messages.js new file mode 100644 index 00000000..c2a3ff47 --- /dev/null +++ b/frontend/test/utils/mockResponses/messages.js @@ -0,0 +1,111 @@ +export const getAssistanceRequestsResponse = [ + { + assistanceRequestId: '2c1c29c7-c984-ee11-8179-000d3a09d4d4', + subject: 'Test Message #1', + referenceNumber: 'REQ-23000076', + statusCode: 6, + stateCode: 1, + categoryName: 'Reporting', + lastUpdatedTime: '2023-12-13T18:17:33Z', + isRead: false, + status: 'Open', + priority: 1, + requestFacilities: [ + { + facilityId: 'c9ecef6c-437d-ee11-8179-000d3a09d132', + facilityName: 'Test OFM Active Facility Number 1', + }, + ], + lastConversationTime: '2023-11-16T21:47:56Z', + }, + { + assistanceRequestId: 'c54ff934-9a93-ee11-be37-000d3a09d4d4', + subject: 'Test Message #2', + referenceNumber: 'REQ-23000272', + statusCode: 2, + stateCode: 0, + categoryName: 'Account Maintenance', + lastUpdatedTime: '2023-12-12T21:32:29Z', + isRead: false, + status: 'Open', + priority: 2, + requestFacilities: [ + { + facilityId: 'c9ecef6c-437d-ee11-8179-000d3a09d132', + facilityName: 'Test OFM Active Facility Number 1', + }, + ], + lastConversationTime: '2023-12-05T18:17:41Z', + }, + { + assistanceRequestId: 'af0c869f-5f95-ee11-be37-000d3a09d699', + subject: 'Test Message #3', + referenceNumber: 'REQ-23000277', + statusCode: 3, + stateCode: 0, + categoryName: 'Reporting', + lastUpdatedTime: '2023-12-13T18:15:53Z', + isRead: true, + status: 'Action required', + priority: 3, + requestFacilities: [ + { + facilityId: 'c9ecef6c-437d-ee11-8179-000d3a09d132', + facilityName: 'Test OFM Active Facility Number 1', + }, + ], + lastConversationTime: '2023-12-12T20:47:51Z', + }, + { + assistanceRequestId: '2d2ca51e-9a88-ee11-8179-000d3af4865d', + subject: 'Test Message #4', + referenceNumber: 'REQ-23000116', + statusCode: 5, + stateCode: 1, + categoryName: 'Intake & Renewal', + lastUpdatedTime: '2023-12-13T18:17:33Z', + isRead: true, + status: 'Closed', + priority: 1, + requestFacilities: [ + { + facilityId: '064effc8-437d-ee11-8179-000d3a09d132', + facilityName: 'Test OFM This is Active Facility #2', + }, + ], + lastConversationTime: '2023-11-21T18:17:14Z', + }, +] + +export const getAssistanceRequestConversation = [ + { + conversationId: '3cc21980-4784-ee11-8179-000d3af4865d', + subject: 'MSG-23000051', + from: 'd8ea4465-1777-ed11-81ac-000d3af4fa76', + sentDate: '2023-11-16T06:15:13Z', + message: 'Final 3rd message from CRM', + ofmSourceSystem: false, + requestValue: 'f9293b70-1584-ee11-8179-000d3a09d699', + statusCode: 1, + }, + { + conversationId: '29626e3e-4784-ee11-8179-000d3af4865d', + subject: 'MSG-23000050', + from: 'd8ea4465-1777-ed11-81ac-000d3af4fa76', + sentDate: '2023-11-16T06:13:27Z', + message: 'This is 2nd message from CRM', + ofmSourceSystem: false, + requestValue: 'f9293b70-1584-ee11-8179-000d3a09d699', + statusCode: 1, + }, + { + conversationId: 'f0e7fe8c-1b84-ee11-8179-000d3af4865d', + subject: 'MSG-23000041', + from: 'd8ea4465-1777-ed11-81ac-000d3af4fa76', + sentDate: '2023-11-16T01:00:42Z', + message: 'This is 1st message from Portal', + ofmSourceSystem: false, + requestValue: 'f9293b70-1584-ee11-8179-000d3a09d699', + statusCode: 1, + }, +] diff --git a/frontend/test/utils/mockResponses/notifications.js b/frontend/test/utils/mockResponses/notifications.js new file mode 100644 index 00000000..7b4bcf22 --- /dev/null +++ b/frontend/test/utils/mockResponses/notifications.js @@ -0,0 +1,37 @@ +export const getNotificationsResponse = [ + { + notificationId: 'ef908c0e-8c94-ee11-be37-000d3a09d699', + subject: 'Test notification #1', + dateReceived: '2023-12-06T23:06:20Z', + notificationContent: '
This is a demo email #1
', + lastOpenedTime: '2023-12-13T18:14:50Z', + isRead: false, + }, + { + notificationId: 'd108df71-8c94-ee11-be37-000d3a09d699', + subject: 'Test notification #2', + dateReceived: '2023-12-06T23:09:03Z', + notificationContent: + '
This is another demo email #2
\n
Updating the notes
', + lastOpenedTime: '2023-12-13T18:14:49Z', + isRead: false, + }, + { + notificationId: 'f333cd71-8c94-ee11-be37-000d3a09d999', + subject: 'Test notification #3', + dateReceived: '2023-12-07T23:09:03Z', + notificationContent: + '
This is another demo email #3
\n
Updating the notes
', + lastOpenedTime: '2023-12-13T18:14:49Z', + isRead: true, + }, + { + notificationId: 'd108df71-8c94-ee11-be37-333f1b02d222', + subject: 'Test notification #4', + dateReceived: '2023-12-09T23:09:03Z', + notificationContent: + '
This is another demo email
\n
Updating the notes
', + lastOpenedTime: '2023-12-13T18:14:49Z', + isRead: false, + }, +] diff --git a/frontend/test/utils/mockResponses/organizations.js b/frontend/test/utils/mockResponses/organizations.js new file mode 100644 index 00000000..3e9a483e --- /dev/null +++ b/frontend/test/utils/mockResponses/organizations.js @@ -0,0 +1,25 @@ +export const getOrganizationResponse = { + organizationId: 'b26aeb95-427d-ee11-8179-000d3a09d132', + accountNumber: 'VL123456', + name: 'Test OFM Organization', + email: 'orgTest@gmail.com', + businessTypeCode: 1, + businessType: 'Registered Company', + phoneLandline: '1234567899', + phoneCell: '9876543211', + streetAddress1: '123 Random Street', + streetAddress2: '456 Street address #2', + city: 'Victoria', + postalCode: 'V8V1V1', + province: 'BC', + isMailingAddressDifferent: true, + mailingStreetAddress1: '999 Mailing Address', + mailingStreetAddress2: '415 Mailing 2', + mailingCity: 'Vancouver', + mailingPostalCode: 'T2J3J3', + mailingProvince: 'BC', + stateCode: 0, + statusCode: 1, + providerType: 1, + ownership: 2, +} diff --git a/frontend/test/utils/setupTests.js b/frontend/test/utils/setupTests.js new file mode 100644 index 00000000..f916ccfa --- /dev/null +++ b/frontend/test/utils/setupTests.js @@ -0,0 +1,40 @@ +import { HttpResponse, http } from 'msw' +import { setupServer } from 'msw/node' +import { afterAll, afterEach, beforeAll } from 'vitest' + +import { getApplicationResponse, getApplicationsResponse } from './mockResponses/applications' +import { getDocumentsResponse } from './mockResponses/documents' +import { getContactsResponse, getFacilityResponse } from './mockResponses/facilities' +import { getOrganizationResponse } from './mockResponses/organizations' + +export const restHandlers = [ + http.get('/api/organizations/b26aeb95-427d-ee11-8179-000d3a09d132', () => { + return HttpResponse.json(getOrganizationResponse) + }), + http.get('/api/applications', () => { + return HttpResponse.json(getApplicationsResponse) + }), + http.get('/api/applications/*', () => { + return HttpResponse.json(getApplicationResponse) + }), + http.get('/api/facilities/c9ecef6c-437d-ee11-8179-000d3a09d132', () => { + return HttpResponse.json(getFacilityResponse) + }), + http.get('/api/facilities/c9ecef6c-437d-ee11-8179-000d3a09d132/contacts', () => { + return HttpResponse.json(getContactsResponse) + }), + http.get('/api/documents', () => { + return HttpResponse.json(getDocumentsResponse) + }), +] + +const server = setupServer(...restHandlers) + +// Start server before all tests +beforeAll(() => server.listen({ onUnhandledRequest: 'error' })) + +// Close server after all tests +afterAll(() => server.close()) + +// Reset handlers after each test `important for test isolation` +afterEach(() => server.resetHandlers()) diff --git a/frontend/test/views/MessagingView.test.js b/frontend/test/views/MessagingView.test.js new file mode 100644 index 00000000..42f02bf2 --- /dev/null +++ b/frontend/test/views/MessagingView.test.js @@ -0,0 +1,90 @@ +import moment from 'moment' +import { describe, expect, test } from 'vitest' +import { createVuetify } from 'vuetify' +import * as components from 'vuetify/components' +import * as directives from 'vuetify/directives' + +import { useMessagesStore } from '@/stores/messages' +import { useNotificationsStore } from '@/stores/notifications' +import MessagingView from '@/views/MessagingView.vue' +import { createTestingPinia } from '@pinia/testing' +import { mount } from '@vue/test-utils' + +import { getAssistanceRequestConversation, getAssistanceRequestsResponse } from '../utils/mockResponses/messages' +import { getNotificationsResponse } from '../utils/mockResponses/notifications' + +const vuetify = createVuetify({ components, directives }) + +describe('Notifications Tab', () => { + const global = { global: { plugins: [createTestingPinia(), vuetify] } } + const notificationsStore = useNotificationsStore() + + notificationsStore.notifications = getNotificationsResponse + + test('Count of unread notifications in the Notifications tab ', async () => { + const wrapper = mount(MessagingView, global) + const actualUnreadNotificationsCount = wrapper.get('#unread-notifications-count')?.text() + const expectedUnreadNotificationsCount = notificationsStore.notifications.filter((notification) => !notification.isRead)?.length + expect(actualUnreadNotificationsCount).toEqual(`(${expectedUnreadNotificationsCount})`) + }) + + test('Open the Notifications tab, then verify Notifications table', async () => { + const wrapper = mount(MessagingView, global) + await wrapper.get('#notifications-tab').trigger('click') + const notificationsTab = wrapper.text() + expect(notificationsTab).toContain('Mark unread') + expect(notificationsTab).toContain('Mark read') + expect(notificationsTab).toContain('Back to Home') + getNotificationsResponse.forEach((notification) => { + expect(notificationsTab).toContain(notification.subject) + expect(notificationsTab).toContain(moment(notification.dateReceived).format('YYYY-MMM-DD')) + }) + }) + + test('Open a notification to read details', async () => { + const wrapper = mount(MessagingView, global) + await wrapper.get('#notifications-tab').trigger('click') + await wrapper.get('.v-data-table__tr').trigger('click') + const notificationDetails = wrapper.get('#notification-details')?.text() + expect(notificationDetails).toContain('This is a demo email #1') + }) +}) + +describe('Messages Tab', () => { + const global = { global: { plugins: [createTestingPinia(), vuetify] } } + const messagesStore = useMessagesStore() + messagesStore.assistanceRequests = getAssistanceRequestsResponse + messagesStore.assistanceRequestConversation = getAssistanceRequestConversation + + test('Count of unread messages in the Messages tab ', async () => { + const wrapper = mount(MessagingView, global) + const actualUnreadMessagesCount = wrapper.get('#unread-messages-count')?.text() + const expectedUnreadMessagesCount = messagesStore.assistanceRequests.filter((message) => !message.isRead)?.length + expect(actualUnreadMessagesCount).toEqual(`(${expectedUnreadMessagesCount})`) + }) + + test('Open the Messages tab, then verify Messages/Assistance Requests table', async () => { + const wrapper = mount(MessagingView, global) + await wrapper.get('#messages-tab').trigger('click') + const messagesTab = wrapper.text() + expect(messagesTab).toContain('New message') + expect(messagesTab).toContain('Mark unread') + expect(messagesTab).toContain('Mark read') + expect(messagesTab).toContain('Back to Home') + getAssistanceRequestsResponse.forEach((message) => { + expect(messagesTab).toContain(message.status) + expect(messagesTab).toContain(message.subject) + expect(messagesTab).toContain(message.categoryName) + expect(messagesTab).toContain(message.categoryName) + expect(messagesTab).toContain(moment(message.lastConversationTime).format('YYYY-MMM-DD')) + }) + }) + + test('Open a message to read conversations', async () => { + const wrapper = mount(MessagingView, global) + await wrapper.get('#messages-tab').trigger('click') + await wrapper.get('.v-data-table__tr').trigger('click') + const conversation = wrapper.get('#request-conversations')?.text() + expect(conversation).toContain('This is 1st message from Portal') + }) +}) diff --git a/frontend/test/views/applications/ApplicationView.test.js b/frontend/test/views/applications/ApplicationView.test.js new file mode 100644 index 00000000..7611525c --- /dev/null +++ b/frontend/test/views/applications/ApplicationView.test.js @@ -0,0 +1,43 @@ +import { describe, test } from 'vitest' +import { createVuetify } from 'vuetify' +import * as components from 'vuetify/components' +import * as directives from 'vuetify/directives' + +import { useAuthStore } from '@/stores/auth' +import ApplicationView from '@/views/applications/ApplicationView.vue' +import { createTestingPinia } from '@pinia/testing' +import { flushPromises, mount } from '@vue/test-utils' + +import { getUserInfoResponse } from '../../utils/mockResponses/auth' + +const vuetify = createVuetify({ components, directives }) + +describe('Application View', () => { + const global = { + global: { + plugins: [createTestingPinia(), vuetify], + mocks: { + $route: { + params: { + path: '/applications/b2b7f374-2995-ee11-be37-000d3a09d4d4/facility-details', + }, + }, + }, + }, + } + const authStore = useAuthStore() + authStore.userInfo = getUserInfoResponse + + /* + =============================================== + TESTS + =============================================== + */ + test('TO-DO', async () => { + const wrapper = mount(ApplicationView, global) + await flushPromises() + console.log(wrapper.text()) + }) + // TO-DO + // Vue Router (Navigation Bar): https://test-utils.vuejs.org/guide/advanced/vue-router.html +}) diff --git a/frontend/test/views/applications/ApplicationsHistoryView.test.js b/frontend/test/views/applications/ApplicationsHistoryView.test.js new file mode 100644 index 00000000..f1288da1 --- /dev/null +++ b/frontend/test/views/applications/ApplicationsHistoryView.test.js @@ -0,0 +1,58 @@ +import moment from 'moment' +import { describe, expect, test } from 'vitest' +import { createVuetify } from 'vuetify' +import * as components from 'vuetify/components' +import * as directives from 'vuetify/directives' + +import { useAuthStore } from '@/stores/auth' +import ApplicationsHistoryView from '@/views/applications/ApplicationsHistoryView.vue' +import { createTestingPinia } from '@pinia/testing' +import { flushPromises, mount } from '@vue/test-utils' + +import { getApplicationsResponse } from '../../utils/mockResponses/applications' +import { getUserInfoResponse } from '../../utils/mockResponses/auth' + +const vuetify = createVuetify({ components, directives }) + +describe('Applications History View', () => { + const global = { global: { plugins: [createTestingPinia(), vuetify], stubs: ['router-link'] } } + const authStore = useAuthStore() + authStore.userInfo = getUserInfoResponse + + /* + =============================================== + TESTS + =============================================== + */ + test('Verify page labels', async () => { + const wrapper = mount(ApplicationsHistoryView, global) + await flushPromises() + expect(wrapper.text()).toContain('Application ID') + expect(wrapper.text()).toContain('Facility') + expect(wrapper.text()).toContain('Status') + expect(wrapper.text()).toContain('Actions') + expect(wrapper.text()).toContain('Date submitted') + expect(wrapper.text()).toContain('Latest activity') + expect(wrapper.text()).toContain('Back to Home') + }) + + test('Verify applications history table after receiving GET applications response', async () => { + const wrapper = mount(ApplicationsHistoryView, global) + await flushPromises() + getApplicationsResponse?.forEach((application) => { + // const action = application?.status === 'Draft' ? 'Continue application' : 'View submission' + const dateSubmitted = !application?.dateSubmitted ? '- - - -' : moment(application?.dateSubmitted).format('YYYY-MMM-DD') + const latestActivity = !application?.latestActivity ? '- - - -' : moment(application?.latestActivity).format('YYYY-MMM-DD') + expect(wrapper.text()).toContain(application.referenceNumber) + expect(wrapper.text()).toContain(application.facilityName) + expect(wrapper.text()).toContain(application.status) + // expect(wrapper.text()).toContain(action) + expect(wrapper.text()).toContain(dateSubmitted) + expect(wrapper.text()).toContain(latestActivity) + }) + }) + + // TO-DO + // Cancel Application button + // Vue Router (Continue Application/View Submission/Back to Home): https://test-utils.vuejs.org/guide/advanced/vue-router.html +}) diff --git a/frontend/test/views/applications/FacilityDetailsView.test.js b/frontend/test/views/applications/FacilityDetailsView.test.js new file mode 100644 index 00000000..f64b6bb8 --- /dev/null +++ b/frontend/test/views/applications/FacilityDetailsView.test.js @@ -0,0 +1,114 @@ +import { describe, expect, test } from 'vitest' +import { createVuetify } from 'vuetify' +import * as components from 'vuetify/components' +import * as directives from 'vuetify/directives' + +import { useAppStore } from '@/stores/app' +import { useApplicationsStore } from '@/stores/applications' +import FacilityDetailsView from '@/views/applications/FacilityDetailsView.vue' +import { createTestingPinia } from '@pinia/testing' +import { flushPromises, mount } from '@vue/test-utils' + +import { getLookupInfoResponse } from '../../utils/mockResponses/app' +import { getApplicationResponse } from '../../utils/mockResponses/applications' +import { getContactsResponse, getFacilityResponse } from '../../utils/mockResponses/facilities' + +const vuetify = createVuetify({ components, directives }) + +describe('Application - Facility Details View', () => { + const global = { + global: { + plugins: [createTestingPinia(), vuetify], + mocks: { + $route: { + params: { + path: '/applications/b2b7f374-2995-ee11-be37-000d3a09d4d4/facility-details', + }, + }, + }, + }, + } + + const appStore = useAppStore() + appStore.userRoles = getLookupInfoResponse.userRoles + + const applicationsStore = useApplicationsStore() + applicationsStore.currentApplication = getApplicationResponse + + /* + =============================================== + TESTS + =============================================== + */ + test('Verify page labels', async () => { + const wrapper = mount(FacilityDetailsView, global) + await flushPromises() + expect(wrapper.text()).toContain('Your facility') + expect(wrapper.text()).toContain('Facility Information') + expect(wrapper.text()).toContain('Primary Contact') + expect(wrapper.text()).toContain('Secondary Contact (Recommended)') + expect(wrapper.text()).toContain('Select contact who to contact about your application') + expect(wrapper.text()).toContain('Select contact') + }) + + test('Verify Facility Information details', async () => { + const wrapper = mount(FacilityDetailsView, global) + await flushPromises() + expect(wrapper.text()).toContain(getFacilityResponse.name) + expect(wrapper.text()).toContain(getFacilityResponse.phoneLandline) + expect(wrapper.text()).toContain(getFacilityResponse.phoneCell) + expect(wrapper.text()).toContain(getFacilityResponse.email) + expect(wrapper.text()).toContain(getFacilityResponse.streetAddress1) + expect(wrapper.text()).toContain(getFacilityResponse.streetAddress2) + expect(wrapper.text()).toContain(getFacilityResponse.city) + expect(wrapper.text()).toContain(getFacilityResponse.postalCode) + expect(wrapper.text()).toContain(getFacilityResponse.province) + expect(wrapper.text()).toContain(getFacilityResponse.mailingStreetAddress1) + expect(wrapper.text()).toContain(getFacilityResponse.mailingStreetAddress2) + expect(wrapper.text()).toContain(getFacilityResponse.mailingCity) + expect(wrapper.text()).toContain(getFacilityResponse.mailingPostalCode) + expect(wrapper.text()).toContain(getFacilityResponse.mailingProvince) + }) + + test('Verify selected Primary Contact in dropdown list', async () => { + const wrapper = mount(FacilityDetailsView, global) + await flushPromises() + const primaryContact = getContactsResponse.find((contact) => getApplicationResponse.primaryContactId === contact.contactId) + const primaryContactFullName = `${primaryContact.firstName} ${primaryContact.lastName}` + expect(wrapper.get('#primary-contact').wrapperElement._value).toEqual(primaryContactFullName) + }) + + test('Verify Primary Contact Information details', async () => { + const wrapper = mount(FacilityDetailsView, global) + await flushPromises() + const primaryContact = getContactsResponse.find((contact) => getApplicationResponse.primaryContactId === contact.contactId) + const roleName = appStore.getRoleNameById(primaryContact?.role) + expect(wrapper.text()).toContain(primaryContact?.firstName) + expect(wrapper.text()).toContain(primaryContact?.lastName) + expect(wrapper.text()).toContain(primaryContact?.email) + expect(wrapper.text()).toContain(primaryContact?.phone) + expect(wrapper.text()).toContain(primaryContact?.userName) + expect(wrapper.text()).toContain(roleName) + }) + + test('Verify selected Secondary Contact in dropdown list', async () => { + const wrapper = mount(FacilityDetailsView, global) + await flushPromises() + const secondaryContact = getContactsResponse.find((contact) => getApplicationResponse.secondaryContactId === contact.contactId) + const secondaryContactFullName = `${secondaryContact?.firstName} ${secondaryContact?.lastName}` + expect(wrapper.get('#secondary-contact').wrapperElement._value).toEqual(secondaryContactFullName) + }) + + test('Verify Secondary Contact Information details', async () => { + const wrapper = mount(FacilityDetailsView, global) + await flushPromises() + const secondaryContact = getContactsResponse.find((contact) => getApplicationResponse.secondaryContactId === contact.contactId) + const roleName = appStore.getRoleNameById(secondaryContact?.role) + expect(wrapper.text()).toContain(secondaryContact?.firstName) + expect(wrapper.text()).toContain(secondaryContact?.lastName) + expect(wrapper.text()).toContain(secondaryContact?.email) + expect(wrapper.text()).toContain(secondaryContact?.phone) + expect(wrapper.text()).toContain(secondaryContact?.userName) + expect(wrapper.text()).toContain(roleName) + }) +}) diff --git a/frontend/test/views/applications/OperatingCostsView.test.js b/frontend/test/views/applications/OperatingCostsView.test.js new file mode 100644 index 00000000..1344c251 --- /dev/null +++ b/frontend/test/views/applications/OperatingCostsView.test.js @@ -0,0 +1,64 @@ +import { describe, expect, test } from 'vitest' +import { createVuetify } from 'vuetify' +import * as components from 'vuetify/components' +import * as directives from 'vuetify/directives' + +import { useAppStore } from '@/stores/app' +import { useApplicationsStore } from '@/stores/applications' +import OperatingCostsView from '@/views/applications/OperatingCostsView.vue' +import { createTestingPinia } from '@pinia/testing' +import { flushPromises, mount } from '@vue/test-utils' + +import { getLookupInfoResponse } from '../../utils/mockResponses/app' +import { getApplicationResponse } from '../../utils/mockResponses/applications' + +const vuetify = createVuetify({ components, directives }) + +describe('Application - Operating Costs View', () => { + const global = { + global: { + plugins: [createTestingPinia(), vuetify], + mocks: { + $route: { + params: { + path: '/applications/b2b7f374-2995-ee11-be37-000d3a09d4d4/operating-costs', + }, + }, + }, + }, + } + + const appStore = useAppStore() + appStore.facilityTypes = getLookupInfoResponse.facilityTypes + + const applicationsStore = useApplicationsStore() + applicationsStore.currentApplication = getApplicationResponse + + /* + =============================================== + TESTS + =============================================== + */ + test('Verify page labels', async () => { + const wrapper = mount(OperatingCostsView, global) + await flushPromises() + expect(wrapper.text()).toContain('Please provide operating costs for the selected facility') + expect(wrapper.text()).toContain('Facility Type') + expect(wrapper.text()).toContain('Yearly Operating Cost') + expect(wrapper.text()).toContain('Yearly Facility Cost') + }) + + test('Verify uploaded documents when facility type is Rent/Lease', async () => { + const wrapper = mount(OperatingCostsView, global) + await flushPromises() + // console.log(wrapper.text()) + // TO-DO + expect(wrapper.text()).toContain('Supporting Documents') + }) + + // TO-DO + // Check Operating costs + // Check page label when Facility Type is Rent/Lease or others + // Check Uploaded Documents when Facility Type is Rent/Lease or others + // Check if form is readonly when status != DRAFT +}) diff --git a/frontend/test/views/applications/SelectFacilityView.test.js b/frontend/test/views/applications/SelectFacilityView.test.js new file mode 100644 index 00000000..03f0412e --- /dev/null +++ b/frontend/test/views/applications/SelectFacilityView.test.js @@ -0,0 +1,67 @@ +import { describe, expect, test } from 'vitest' +import { createVuetify } from 'vuetify' +import * as components from 'vuetify/components' +import * as directives from 'vuetify/directives' + +import { useAuthStore } from '@/stores/auth' +import SelectFacilityView from '@/views/applications/SelectFacilityView.vue' +import { createTestingPinia } from '@pinia/testing' +import { flushPromises, mount } from '@vue/test-utils' + +import { getUserInfoResponse } from '../../utils/mockResponses/auth' +import { getOrganizationResponse } from '../../utils/mockResponses/organizations' + +const vuetify = createVuetify({ components, directives }) + +describe('Application - Select Facility View', () => { + const global = { + global: { + plugins: [createTestingPinia(), vuetify], + }, + } + + const authStore = useAuthStore() + authStore.userInfo = getUserInfoResponse + + /* + =============================================== + TESTS + =============================================== + */ + test('Verify page labels', async () => { + const wrapper = mount(SelectFacilityView, global) + await flushPromises() + expect(wrapper.text()).toContain('Begin an Operating Funding Model application') + expect(wrapper.text()).toContain('Organization information') + expect(wrapper.text()).toContain("Please review the following pre-populated information for correctness and contact your organization's account manager to make updates if required.") + expect(wrapper.text()).toContain('I confirm that Organization information is correct.') + expect(wrapper.text()).toContain('To start your application, select a facility') + expect(wrapper.text()).toContain('If your facility is not listed, contact your Account Manager.') + expect(wrapper.text()).toContain('Select your facility:') + }) + + test('Verify Organization Information details', async () => { + const wrapper = mount(SelectFacilityView, global) + await flushPromises() + expect(wrapper.text()).toContain(getOrganizationResponse.name) + expect(wrapper.text()).toContain(getOrganizationResponse.businessType) + expect(wrapper.text()).toContain(getOrganizationResponse.email) + expect(wrapper.text()).toContain(getOrganizationResponse.phoneCell) + expect(wrapper.text()).toContain(getOrganizationResponse.phoneLandline) + expect(wrapper.text()).toContain(getOrganizationResponse.streetAddress1) + expect(wrapper.text()).toContain(getOrganizationResponse.streetAddress2) + expect(wrapper.text()).toContain(getOrganizationResponse.city) + expect(wrapper.text()).toContain(getOrganizationResponse.postalCode) + expect(wrapper.text()).toContain(getOrganizationResponse.province) + expect(wrapper.text()).toContain(getOrganizationResponse.mailingStreetAddress1) + expect(wrapper.text()).toContain(getOrganizationResponse.mailingStreetAddress2) + expect(wrapper.text()).toContain(getOrganizationResponse.mailingCity) + expect(wrapper.text()).toContain(getOrganizationResponse.mailingPostalCode) + expect(wrapper.text()).toContain(getOrganizationResponse.mailingProvince) + expect(wrapper.text()).toContain(getOrganizationResponse.mailingStreetAddress2) + }) + + // TO-DO + // Select facility from dropdown list + // Check if form is readonly when status != DRAFT +}) diff --git a/frontend/test/views/applications/StaffingView.test.js b/frontend/test/views/applications/StaffingView.test.js new file mode 100644 index 00000000..5eef8bab --- /dev/null +++ b/frontend/test/views/applications/StaffingView.test.js @@ -0,0 +1,56 @@ +import { describe, expect, test } from 'vitest' +import { createVuetify } from 'vuetify' +import * as components from 'vuetify/components' +import * as directives from 'vuetify/directives' + +import { useApplicationsStore } from '@/stores/applications' +import StaffingView from '@/views/applications/StaffingView.vue' +import { createTestingPinia } from '@pinia/testing' +import { mount } from '@vue/test-utils' + +import { getApplicationResponse } from '../../utils/mockResponses/applications' + +const vuetify = createVuetify({ components, directives }) + +describe('Application - Staffing View', () => { + const global = { + global: { + plugins: [createTestingPinia(), vuetify], + }, + } + const applicationsStore = useApplicationsStore() + applicationsStore.currentApplication = getApplicationResponse + + /* + =============================================== + TESTS + =============================================== + */ + test('Verify page labels', async () => { + const wrapper = mount(StaffingView, global) + expect(wrapper.text()).toContain('Employee Category') + expect(wrapper.text()).toContain('Full-Time Position') + expect(wrapper.text()).toContain('Part-Time Position') + expect(wrapper.text()).toContain('Infant/Toddler Early Childhood Educator') + expect(wrapper.text()).toContain('Early Childhood Educator') + expect(wrapper.text()).toContain('Early Childhood Educator Assistant') + expect(wrapper.text()).toContain('Responsible Adult') + expect(wrapper.text()).toContain('Total') + }) + + test('Verify total staff calculation', async () => { + const wrapper = mount(StaffingView, global) + const totalFullTimePosition = + getApplicationResponse?.staffingInfantECEducatorFullTime + + getApplicationResponse?.staffingECEducatorFullTime + + getApplicationResponse?.staffingECEducatorAssistantFullTime + + getApplicationResponse?.staffingResponsibleAdultFullTime + const totalPartTimePosition = + getApplicationResponse?.staffingInfantECEducatorPartTime + + getApplicationResponse?.staffingECEducatorPartTime + + getApplicationResponse?.staffingECEducatorAssistantPartTime + + getApplicationResponse?.staffingResponsibleAdultPartTime + expect(wrapper.text()).toContain(totalFullTimePosition) + expect(wrapper.text()).toContain(totalPartTimePosition) + }) +}) diff --git a/frontend/vite.config.js b/frontend/vite.config.js index 62cc883c..6f034dd0 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -34,5 +34,6 @@ export default defineConfig({ inline: ['vuetify'], }, }, + setupFiles: './test/utils/setupTests.js', }, })