diff --git a/.nvmrc b/.nvmrc index 016e34baf..67e145bf0 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.17.0 +v20.18.0 diff --git a/.release-version b/.release-version index bef54bc56..03751a744 100644 --- a/.release-version +++ b/.release-version @@ -1 +1 @@ -10.7.7 +10.7.8 diff --git a/package-lock.json b/package-lock.json index 76d91871a..a23e223d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "swrv": "^1.0.4", "tailwindcss": "3.4.13", "vite": "^5.4.8", - "vue": "^3.5.8", + "vue": "^3.5.11", "vue-router": "^4.4.5", "vue3-selecto": "^1.12.3", "vuex": "^4.1.0" @@ -44,7 +44,7 @@ "postcss-cli": "^11.0.0", "prettier": "3.3.3", "rollup-plugin-visualizer": "^5.12.0", - "vitest": "^2.1.1" + "vitest": "^2.1.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -1166,13 +1166,13 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", - "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.2.tgz", + "integrity": "sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg==", "dev": true, "dependencies": { - "@vitest/spy": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/spy": "2.1.2", + "@vitest/utils": "2.1.2", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" }, @@ -1181,9 +1181,9 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", - "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.2.tgz", + "integrity": "sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA==", "dev": true, "dependencies": { "@vitest/spy": "^2.1.0-beta.1", @@ -1194,7 +1194,7 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/spy": "2.1.1", + "@vitest/spy": "2.1.2", "msw": "^2.3.5", "vite": "^5.0.0" }, @@ -1217,9 +1217,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", - "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.2.tgz", + "integrity": "sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA==", "dev": true, "dependencies": { "tinyrainbow": "^1.2.0" @@ -1229,12 +1229,12 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", - "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.2.tgz", + "integrity": "sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw==", "dev": true, "dependencies": { - "@vitest/utils": "2.1.1", + "@vitest/utils": "2.1.2", "pathe": "^1.1.2" }, "funding": { @@ -1242,12 +1242,12 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", - "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.2.tgz", + "integrity": "sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA==", "dev": true, "dependencies": { - "@vitest/pretty-format": "2.1.1", + "@vitest/pretty-format": "2.1.2", "magic-string": "^0.30.11", "pathe": "^1.1.2" }, @@ -1256,9 +1256,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", - "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.2.tgz", + "integrity": "sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==", "dev": true, "dependencies": { "tinyspy": "^3.0.0" @@ -1268,12 +1268,12 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", - "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.2.tgz", + "integrity": "sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==", "dev": true, "dependencies": { - "@vitest/pretty-format": "2.1.1", + "@vitest/pretty-format": "2.1.2", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" }, @@ -1282,36 +1282,36 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.8.tgz", - "integrity": "sha512-Uzlxp91EPjfbpeO5KtC0KnXPkuTfGsNDeaKQJxQN718uz+RqDYarEf7UhQJGK+ZYloD2taUbHTI2J4WrUaZQNA==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.11.tgz", + "integrity": "sha512-PwAdxs7/9Hc3ieBO12tXzmTD+Ln4qhT/56S+8DvrrZ4kLDn4Z/AMUr8tXJD0axiJBS0RKIoNaR0yMuQB9v9Udg==", "dependencies": { "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.8", + "@vue/shared": "3.5.11", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.8.tgz", - "integrity": "sha512-GUNHWvoDSbSa5ZSHT9SnV5WkStWfzJwwTd6NMGzilOE/HM5j+9EB9zGXdtu/fCNEmctBqMs6C9SvVPpVPuk1Eg==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.11.tgz", + "integrity": "sha512-pyGf8zdbDDRkBrEzf8p7BQlMKNNF5Fk/Cf/fQ6PiUz9at4OaUfyXW0dGJTo2Vl1f5U9jSLCNf0EZJEogLXoeew==", "dependencies": { - "@vue/compiler-core": "3.5.8", - "@vue/shared": "3.5.8" + "@vue/compiler-core": "3.5.11", + "@vue/shared": "3.5.11" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.8.tgz", - "integrity": "sha512-taYpngQtSysrvO9GULaOSwcG5q821zCoIQBtQQSx7Uf7DxpR6CIHR90toPr9QfDD2mqHQPCSgoWBvJu0yV9zjg==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.11.tgz", + "integrity": "sha512-gsbBtT4N9ANXXepprle+X9YLg2htQk1sqH/qGJ/EApl+dgpUBdTv3yP7YlR535uHZY3n6XaR0/bKo0BgwwDniw==", "dependencies": { "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.8", - "@vue/compiler-dom": "3.5.8", - "@vue/compiler-ssr": "3.5.8", - "@vue/shared": "3.5.8", + "@vue/compiler-core": "3.5.11", + "@vue/compiler-dom": "3.5.11", + "@vue/compiler-ssr": "3.5.11", + "@vue/shared": "3.5.11", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.47", @@ -1319,12 +1319,12 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.8.tgz", - "integrity": "sha512-W96PtryNsNG9u0ZnN5Q5j27Z/feGrFV6zy9q5tzJVyJaLiwYxvC0ek4IXClZygyhjm+XKM7WD9pdKi/wIRVC/Q==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.11.tgz", + "integrity": "sha512-P4+GPjOuC2aFTk1Z4WANvEhyOykcvEd5bIj2KVNGKGfM745LaXGr++5njpdBTzVz5pZifdlR1kpYSJJpIlSePA==", "dependencies": { - "@vue/compiler-dom": "3.5.8", - "@vue/shared": "3.5.8" + "@vue/compiler-dom": "3.5.11", + "@vue/shared": "3.5.11" } }, "node_modules/@vue/devtools-api": { @@ -1333,49 +1333,49 @@ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" }, "node_modules/@vue/reactivity": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.8.tgz", - "integrity": "sha512-mlgUyFHLCUZcAYkqvzYnlBRCh0t5ZQfLYit7nukn1GR96gc48Bp4B7OIcSfVSvlG1k3BPfD+p22gi1t2n9tsXg==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.11.tgz", + "integrity": "sha512-Nqo5VZEn8MJWlCce8XoyVqHZbd5P2NH+yuAaFzuNSR96I+y1cnuUiq7xfSG+kyvLSiWmaHTKP1r3OZY4mMD50w==", "dependencies": { - "@vue/shared": "3.5.8" + "@vue/shared": "3.5.11" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.8.tgz", - "integrity": "sha512-fJuPelh64agZ8vKkZgp5iCkPaEqFJsYzxLk9vSC0X3G8ppknclNDr61gDc45yBGTaN5Xqc1qZWU3/NoaBMHcjQ==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.11.tgz", + "integrity": "sha512-7PsxFGqwfDhfhh0OcDWBG1DaIQIVOLgkwA5q6MtkPiDFjp5gohVnJEahSktwSFLq7R5PtxDKy6WKURVN1UDbzA==", "dependencies": { - "@vue/reactivity": "3.5.8", - "@vue/shared": "3.5.8" + "@vue/reactivity": "3.5.11", + "@vue/shared": "3.5.11" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.8.tgz", - "integrity": "sha512-DpAUz+PKjTZPUOB6zJgkxVI3GuYc2iWZiNeeHQUw53kdrparSTG6HeXUrYDjaam8dVsCdvQxDz6ZWxnyjccUjQ==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.11.tgz", + "integrity": "sha512-GNghjecT6IrGf0UhuYmpgaOlN7kxzQBhxWEn08c/SQDxv1yy4IXI1bn81JgEpQ4IXjRxWtPyI8x0/7TF5rPfYQ==", "dependencies": { - "@vue/reactivity": "3.5.8", - "@vue/runtime-core": "3.5.8", - "@vue/shared": "3.5.8", + "@vue/reactivity": "3.5.11", + "@vue/runtime-core": "3.5.11", + "@vue/shared": "3.5.11", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.8.tgz", - "integrity": "sha512-7AmC9/mEeV9mmXNVyUIm1a1AjUhyeeGNbkLh39J00E7iPeGks8OGRB5blJiMmvqSh8SkaS7jkLWSpXtxUCeagA==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.11.tgz", + "integrity": "sha512-cVOwYBxR7Wb1B1FoxYvtjJD8X/9E5nlH4VSkJy2uMA1MzYNdzAAB//l8nrmN9py/4aP+3NjWukf9PZ3TeWULaA==", "dependencies": { - "@vue/compiler-ssr": "3.5.8", - "@vue/shared": "3.5.8" + "@vue/compiler-ssr": "3.5.11", + "@vue/shared": "3.5.11" }, "peerDependencies": { - "vue": "3.5.8" + "vue": "3.5.11" } }, "node_modules/@vue/shared": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.8.tgz", - "integrity": "sha512-mJleSWbAGySd2RJdX1RBtcrUBX6snyOc0qHpgk3lGi4l9/P/3ny3ELqFWqYdkXIwwNN/kdm8nD9ky8o6l/Lx2A==" + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.11.tgz", + "integrity": "sha512-W8GgysJVnFo81FthhzurdRAWP/byq3q2qIw70e0JWblzVhjgOMiC2GyovXrZTFQJnFVryYaKGP3Tc9vYzYm6PQ==" }, "node_modules/@vue/test-utils": { "version": "2.4.6", @@ -7747,9 +7747,9 @@ } }, "node_modules/vite-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", - "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.2.tgz", + "integrity": "sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -7768,18 +7768,18 @@ } }, "node_modules/vitest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", - "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.2.tgz", + "integrity": "sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A==", "dev": true, "dependencies": { - "@vitest/expect": "2.1.1", - "@vitest/mocker": "2.1.1", - "@vitest/pretty-format": "^2.1.1", - "@vitest/runner": "2.1.1", - "@vitest/snapshot": "2.1.1", - "@vitest/spy": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/expect": "2.1.2", + "@vitest/mocker": "2.1.2", + "@vitest/pretty-format": "^2.1.2", + "@vitest/runner": "2.1.2", + "@vitest/snapshot": "2.1.2", + "@vitest/spy": "2.1.2", + "@vitest/utils": "2.1.2", "chai": "^5.1.1", "debug": "^4.3.6", "magic-string": "^0.30.11", @@ -7790,7 +7790,7 @@ "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.1", + "vite-node": "2.1.2", "why-is-node-running": "^2.3.0" }, "bin": { @@ -7805,8 +7805,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.1", - "@vitest/ui": "2.1.1", + "@vitest/browser": "2.1.2", + "@vitest/ui": "2.1.2", "happy-dom": "*", "jsdom": "*" }, @@ -7832,15 +7832,15 @@ } }, "node_modules/vue": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.8.tgz", - "integrity": "sha512-hvuvuCy51nP/1fSRvrrIqTLSvrSyz2Pq+KQ8S8SXCxTWVE0nMaOnSDnSOxV1eYmGfvK7mqiwvd1C59CEEz7dAQ==", - "dependencies": { - "@vue/compiler-dom": "3.5.8", - "@vue/compiler-sfc": "3.5.8", - "@vue/runtime-dom": "3.5.8", - "@vue/server-renderer": "3.5.8", - "@vue/shared": "3.5.8" + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.11.tgz", + "integrity": "sha512-/8Wurrd9J3lb72FTQS7gRMNQD4nztTtKPmuDuPuhqXmmpD6+skVjAeahNpVzsuky6Sy9gy7wn8UadqPtt9SQIg==", + "dependencies": { + "@vue/compiler-dom": "3.5.11", + "@vue/compiler-sfc": "3.5.11", + "@vue/runtime-dom": "3.5.11", + "@vue/server-renderer": "3.5.11", + "@vue/shared": "3.5.11" }, "peerDependencies": { "typescript": "*" diff --git a/package.json b/package.json index 02264c262..e458f136e 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "swrv": "^1.0.4", "tailwindcss": "3.4.13", "vite": "^5.4.8", - "vue": "^3.5.8", + "vue": "^3.5.11", "vue-router": "^4.4.5", "vue3-selecto": "^1.12.3", "vuex": "^4.1.0" @@ -60,6 +60,6 @@ "postcss-cli": "^11.0.0", "prettier": "3.3.3", "rollup-plugin-visualizer": "^5.12.0", - "vitest": "^2.1.1" + "vitest": "^2.1.2" } } diff --git a/src/store/traction/saphyr/tubes/actions.js b/src/store/traction/saphyr/tubes/actions.js index 88eb35ae8..894a46043 100644 --- a/src/store/traction/saphyr/tubes/actions.js +++ b/src/store/traction/saphyr/tubes/actions.js @@ -1,12 +1,17 @@ -import handlePromise from '@/api/v1/PromiseHelper' +import handleResponse from '@/api/v2/ResponseHelper.js' +import { dataToObjectById } from '@/api/JsonApi.js' const getTractionTubesForBarcodes = async ({ commit, getters }, barcodes) => { const request = getters.tubeRequest const barcodeString = barcodes.join(',') const promise = request.get({ filter: { barcode: barcodeString }, include: 'materials' }) - const response = await handlePromise(promise) - if (response.successful && !response.empty) { - const tubes = response.deserialize.tubes + const response = await handleResponse(promise) + const { + body: { data = {} }, + success, + } = response + if (success) { + const tubes = dataToObjectById({ data, includeRelationships: true }) commit('setTubes', tubes) } return response @@ -32,7 +37,7 @@ const createLibrariesInTraction = async ({ getters }, payload) => { const request = getters.libraryRequest const promise = request.create({ data: body }) - const response = await handlePromise(promise) + const response = await handleResponse(promise) return response } @@ -41,22 +46,24 @@ const deleteLibraries = async ({ getters }, libraryIds) => { const request = getters.libraryRequest const promises = request.destroy(libraryIds) - const responses = await Promise.all(promises.map((promise) => handlePromise(promise))) + const responses = await Promise.all(promises.map((promise) => handleResponse(promise))) return responses } const setLibraries = async ({ commit, getters }) => { const request = getters.libraryRequest const promise = request.get() - const response = await handlePromise(promise) let libraries = null - if (response.successful && !response.empty) { - libraries = response.deserialize.libraries - + const response = await handleResponse(promise) + const { + body: { data = {} }, + success, + } = response + if (success) { + libraries = dataToObjectById({ data, includeRelationships: true }) commit('setLibraries', libraries) } - return libraries } diff --git a/src/store/traction/saphyr/tubes/getters.js b/src/store/traction/saphyr/tubes/getters.js index e2f44b7a5..e738380c6 100644 --- a/src/store/traction/saphyr/tubes/getters.js +++ b/src/store/traction/saphyr/tubes/getters.js @@ -1,11 +1,11 @@ const getters = { tractionTubes: (state) => state.tractionTubes, - tubeRequest: (state, getters, rootState) => rootState.api.v1.traction.saphyr.tubes, - requestsRequest: (state, getters, rootState) => rootState.api.v1.traction.saphyr.requests, + tubeRequest: (state, getters, rootState) => rootState.api.v2.traction.saphyr.tubes, + requestsRequest: (state, getters, rootState) => rootState.api.v2.traction.saphyr.requests, tractionTubesWithInfo: (state) => state.tractionTubes.map((i) => Object.assign(i.material, { barcode: i.barcode })), - libraryRequest: (state, getters, rootState) => rootState.api.v1.traction.saphyr.libraries, - libraries: (state) => state.libraries, + libraryRequest: (state, getters, rootState) => rootState.api.v2.traction.saphyr.libraries, + libraries: (state) => Object.values(state.libraries), } export default getters diff --git a/src/views/saphyr/SaphyrLibraries.vue b/src/views/saphyr/SaphyrLibraries.vue index 156e322ee..04f1b2434 100644 --- a/src/views/saphyr/SaphyrLibraries.vue +++ b/src/views/saphyr/SaphyrLibraries.vue @@ -97,7 +97,7 @@ export default { const selectedBarcodes = this.selected.map((s) => s.barcode) const responses = await this.deleteLibraries(selectedIds) - if (responses.every((r) => r.successful)) { + if (responses.every((r) => r.success)) { const keyword = selectedIds.length > 1 ? 'Libraries' : 'Library' this.showAlert( `${keyword} ${selectedBarcodes.join(', ')} successfully deleted`, diff --git a/tests/data/index.js b/tests/data/index.js index 7547f28f6..302620788 100644 --- a/tests/data/index.js +++ b/tests/data/index.js @@ -5,9 +5,6 @@ import RunNoLibrary from './runNoLibrary' import RunWithLibrary from './runWithLibrary' import Samples from './samples' import TestResponse from './testResponse' -import TractionSaphyrLibraries from './tractionSaphyrLibraries' -import TractionSaphyrTubesWithRequest from './tractionSaphyrTubesWithRequest' -import TractionTubesWithSample from './tractionTubesWithSample' import TubeWithLibrary from './tubeWithLibrary' import CreatePacbioRequest from './createPacbioRequest' import TractionPacbioLibrary from './tractionPacbioLibrary' @@ -61,9 +58,6 @@ export default { RunWithLibrary, Samples, TestResponse, - TractionSaphyrLibraries, - TractionSaphyrTubesWithRequest, - TractionTubesWithSample, TubeWithLibrary, CreatePacbioRequest, TractionPacbioLibraries, diff --git a/tests/data/tractionSaphyrLibraries.json b/tests/data/tractionSaphyrLibraries.json deleted file mode 100644 index 87a8353ac..000000000 --- a/tests/data/tractionSaphyrLibraries.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "data": { - "data": [ - { - "id": "1", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-11", - "sample_name": "Sample1", - "enzyme_name": "Nb.BbvCI", - "created_at": "08/14/2019 10:05", - "deactivated_at": "08/19/2019 02:12" - } - }, - { - "id": "2", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-12", - "sample_name": "Sample2", - "enzyme_name": "Nb.BsmI", - "created_at": "08/14/2019 10:05", - "deactivated_at": null - } - }, - { - "id": "3", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-13", - "sample_name": "Sample3", - "enzyme_name": "Nb.BsrDI", - "created_at": "08/14/2019 10:05", - "deactivated_at": null - } - }, - { - "id": "4", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-14", - "sample_name": "Sample4", - "enzyme_name": "Nt.BspQI", - "created_at": "08/14/2019 10:05", - "deactivated_at": null - } - }, - { - "id": "5", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-15", - "sample_name": "Sample5", - "enzyme_name": "Nb.BssSI", - "created_at": "08/14/2019 10:05", - "deactivated_at": null - } - }, - { - "id": "6", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-16", - "sample_name": "Sample1", - "enzyme_name": "DLE-1", - "created_at": "08/14/2019 10:05", - "deactivated_at": null - } - }, - { - "id": "7", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-17", - "sample_name": "Sample1", - "enzyme_name": "Nb.BsmI", - "created_at": "08/14/2019 10:19", - "deactivated_at": null - } - }, - { - "id": "8", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-18", - "sample_name": "Sample1", - "enzyme_name": "Nb.BbvCI", - "created_at": "08/14/2019 10:42", - "deactivated_at": null - } - }, - { - "id": "9", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-19", - "sample_name": "Sample1", - "enzyme_name": "Nb.BsmI", - "created_at": "08/14/2019 01:31", - "deactivated_at": null - } - }, - { - "id": "10", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-20", - "sample_name": "Sample2", - "enzyme_name": "Nb.BssSI", - "created_at": "08/14/2019 01:31", - "deactivated_at": null - } - }, - { - "id": "11", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-21", - "sample_name": "Sample3", - "enzyme_name": "Nb.BssSI", - "created_at": "08/14/2019 01:32", - "deactivated_at": null - } - }, - { - "id": "12", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-22", - "sample_name": "Sample1", - "enzyme_name": "Nb.BbvCI", - "created_at": "08/20/2019 02:18", - "deactivated_at": null - } - }, - { - "id": "13", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-23", - "sample_name": "Sample1", - "enzyme_name": "Nb.BbvCI", - "created_at": "08/20/2019 02:26", - "deactivated_at": null - } - }, - { - "id": "14", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-24", - "sample_name": "Sample3", - "enzyme_name": "Nb.BbvCI", - "created_at": "08/20/2019 02:26", - "deactivated_at": null - } - }, - { - "id": "15", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-25", - "sample_name": "Sample5", - "enzyme_name": "Nb.BsrDI", - "created_at": "08/20/2019 02:28", - "deactivated_at": null - } - }, - { - "id": "16", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-26", - "sample_name": "Sample4", - "enzyme_name": "Nb.BsmI", - "created_at": "08/20/2019 02:31", - "deactivated_at": null - } - }, - { - "id": "17", - "type": "libraries", - "attributes": { - "state": "pending", - "barcode": "TRAC-27", - "sample_name": "Sample1", - "enzyme_name": "Nb.BbvCI", - "created_at": "08/22/2019 09:52", - "deactivated_at": null - } - } - ] - }, - "status": 200, - "statusText": "Success" -} diff --git a/tests/data/tractionSaphyrTubesWithRequest.json b/tests/data/tractionSaphyrTubesWithRequest.json deleted file mode 100644 index 65dc16fe4..000000000 --- a/tests/data/tractionSaphyrTubesWithRequest.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "data": { - "data": [ - { - "id": "1", - "type": "tubes", - "links": { - "self": "http://localhost:3100/v1/saphyr/tubes/1" - }, - "attributes": { - "barcode": "TRAC-1" - }, - "relationships": { - "materials": { - "links": { - "self": "http://localhost:3100/v1/saphyr/tubes/1/relationships/material", - "related": "http://localhost:3100/v1/saphyr/tubes/1/material" - }, - "data": [ - { - "type": "requests", - "id": "1" - } - ] - } - } - } - ], - "included": [ - { - "id": "1", - "type": "requests", - "attributes": { - "external_study_id": "1", - "sample_name": "Sample1", - "barcode": "TRAC-1" - } - } - ] - }, - "status": 200, - "statusText": "Success" -} diff --git a/tests/factories/SaphyrLibrariesFactory.js b/tests/factories/SaphyrLibrariesFactory.js new file mode 100644 index 000000000..5c9efebaa --- /dev/null +++ b/tests/factories/SaphyrLibrariesFactory.js @@ -0,0 +1,228 @@ +import BaseFactory from './BaseFactory.js' +import { dataToObjectById } from '@/api/JsonApi.js' + +const createStoreData = (data) => { + const mappedData = dataToObjectById({ data: data.data, includeRelationships: true }) + return { data: mappedData, dataArray: Object.values(mappedData) } +} +/** + * Factory for creating a Saphyr Pipeline Run + * @returns a base factory object with the run data + * store data object is for simulating the stored data in tests + */ +const SaphyrLibrariesFactory = () => { + const data = { + data: [ + { + id: '1', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-11', + sample_name: 'Sample1', + enzyme_name: 'Nb.BbvCI', + created_at: '08/14/2019 10:05', + deactivated_at: '08/19/2019 02:12', + }, + }, + { + id: '2', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-12', + sample_name: 'Sample2', + enzyme_name: 'Nb.BsmI', + created_at: '08/14/2019 10:05', + deactivated_at: null, + }, + }, + { + id: '3', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-13', + sample_name: 'Sample3', + enzyme_name: 'Nb.BsrDI', + created_at: '08/14/2019 10:05', + deactivated_at: null, + }, + }, + { + id: '4', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-14', + sample_name: 'Sample4', + enzyme_name: 'Nt.BspQI', + created_at: '08/14/2019 10:05', + deactivated_at: null, + }, + }, + { + id: '5', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-15', + sample_name: 'Sample5', + enzyme_name: 'Nb.BssSI', + created_at: '08/14/2019 10:05', + deactivated_at: null, + }, + }, + { + id: '6', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-16', + sample_name: 'Sample1', + enzyme_name: 'DLE-1', + created_at: '08/14/2019 10:05', + deactivated_at: null, + }, + }, + { + id: '7', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-17', + sample_name: 'Sample1', + enzyme_name: 'Nb.BsmI', + created_at: '08/14/2019 10:19', + deactivated_at: null, + }, + }, + { + id: '8', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-18', + sample_name: 'Sample1', + enzyme_name: 'Nb.BbvCI', + created_at: '08/14/2019 10:42', + deactivated_at: null, + }, + }, + { + id: '9', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-19', + sample_name: 'Sample1', + enzyme_name: 'Nb.BsmI', + created_at: '08/14/2019 01:31', + deactivated_at: null, + }, + }, + { + id: '10', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-20', + sample_name: 'Sample2', + enzyme_name: 'Nb.BssSI', + created_at: '08/14/2019 01:31', + deactivated_at: null, + }, + }, + { + id: '11', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-21', + sample_name: 'Sample3', + enzyme_name: 'Nb.BssSI', + created_at: '08/14/2019 01:32', + deactivated_at: null, + }, + }, + { + id: '12', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-22', + sample_name: 'Sample1', + enzyme_name: 'Nb.BbvCI', + created_at: '08/20/2019 02:18', + deactivated_at: null, + }, + }, + { + id: '13', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-23', + sample_name: 'Sample1', + enzyme_name: 'Nb.BbvCI', + created_at: '08/20/2019 02:26', + deactivated_at: null, + }, + }, + { + id: '14', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-24', + sample_name: 'Sample3', + enzyme_name: 'Nb.BbvCI', + created_at: '08/20/2019 02:26', + deactivated_at: null, + }, + }, + { + id: '15', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-25', + sample_name: 'Sample5', + enzyme_name: 'Nb.BsrDI', + created_at: '08/20/2019 02:28', + deactivated_at: null, + }, + }, + { + id: '16', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-26', + sample_name: 'Sample4', + enzyme_name: 'Nb.BsmI', + created_at: '08/20/2019 02:31', + deactivated_at: null, + }, + }, + { + id: '17', + type: 'libraries', + attributes: { + state: 'pending', + barcode: 'TRAC-27', + sample_name: 'Sample1', + enzyme_name: 'Nb.BbvCI', + created_at: '08/22/2019 09:52', + deactivated_at: null, + }, + }, + ], + } + return { + ...BaseFactory(data), + storeData: createStoreData({ ...data }), + } +} + +export default SaphyrLibrariesFactory diff --git a/tests/factories/SaphyrTubesFactory.js b/tests/factories/SaphyrTubesFactory.js new file mode 100644 index 000000000..2d09e03be --- /dev/null +++ b/tests/factories/SaphyrTubesFactory.js @@ -0,0 +1,113 @@ +import BaseFactory from './BaseFactory.js' +import { dataToObjectById } from '@/api/JsonApi.js' + +const createStoreData = (data) => { + const mappedData = dataToObjectById({ data: data.data, includeRelationships: true }) + return { data: mappedData, dataArray: Object.values(mappedData) } +} + +/** + * Factory for creating a Saphyr Pipeline Run + * @returns a base factory object with the run data + * store data object is for simulating the stored data in tests + */ +const SaphyrTubesFactory = (type) => { + let data = { data: [] } + if (type === 'request') { + data = { + data: [ + { + id: '1', + type: 'tubes', + links: { + self: 'http://localhost:3100/v1/saphyr/tubes/1', + }, + attributes: { + barcode: 'TRAC-1', + }, + relationships: { + materials: { + links: { + self: 'http://localhost:3100/v1/saphyr/tubes/1/relationships/material', + related: 'http://localhost:3100/v1/saphyr/tubes/1/material', + }, + data: [ + { + type: 'requests', + id: '1', + }, + { + type: 'container_materials', + id: '21', + }, + ], + }, + }, + }, + ], + included: [ + { + id: '1', + type: 'requests', + attributes: { + external_study_id: '1', + sample_name: 'Sample1', + barcode: 'TRAC-1', + }, + }, + ], + } + } else if (type === 'library') { + data = { + data: [ + { + id: '21', + type: 'tubes', + links: { + self: 'http://localhost:3000/v1/saphyr/tubes/21', + }, + attributes: { + barcode: 'TRAC-2-21', + }, + relationships: { + materials: { + links: { + self: 'http://localhost:3000/v1/saphyr/tubes/21/relationships/materials', + related: 'http://localhost:3000/v1/saphyr/tubes/21/materials', + }, + data: [ + { + type: 'container_materials', + id: '21', + }, + ], + }, + }, + }, + ], + included: [ + { + id: '21', + type: 'container_materials', + attributes: { + state: 'pending', + enzyme_name: 'Nb.BsrDI', + deactivated_at: null, + barcode: 'TRAC-2-21', + created_at: '2020/05/04 13:26', + sample_name: 'Sample1', + material_type: 'library', + material_id: '1', + }, + }, + ], + } + } + + return { + ...BaseFactory(data), + storeData: createStoreData({ ...data }), + } +} + +export default SaphyrTubesFactory diff --git a/tests/unit/store/traction/saphyr/tubes/actions.spec.js b/tests/unit/store/traction/saphyr/tubes/actions.spec.js index be3ca5c58..b7eb50c43 100644 --- a/tests/unit/store/traction/saphyr/tubes/actions.spec.js +++ b/tests/unit/store/traction/saphyr/tubes/actions.spec.js @@ -1,64 +1,65 @@ -import { Data } from '@support/testHelper' -import Response from '@/api/v1/Response' import * as Actions from '@/store/traction/saphyr/tubes/actions' +import SaphyrTubesFactory from '@tests/factories/SaphyrTubesFactory.js' +import BaseFactory from '../../../../../factories/BaseFactory' + +const saphyrTubesRequestFactory = SaphyrTubesFactory('request') +const saphyrTubesLibraryFactory = SaphyrTubesFactory('library') +const failedResponse = { + errors: [ + { + title: 'Internal Server Error', + status: '500', + }, + ], +} describe('#getTractionTubesForBarcodes', () => { - let commit, get, getters, barcodeList, failedResponse, emptyResponse + let commit, get, getters, barcodeList beforeEach(() => { commit = vi.fn() get = vi.fn() getters = { tubeRequest: { get: get } } barcodeList = ['TRAC-1'] - - emptyResponse = { data: { data: [] }, status: 200, statusText: 'Success' } - failedResponse = { data: { data: [] }, status: 500, statusText: 'Internal Server Error' } }) it('successfully for samples', async () => { - get.mockReturnValue(Data.TractionSaphyrTubesWithRequest) - - const expectedResponse = new Response(Data.TractionSaphyrTubesWithRequest) - const expectedTubes = expectedResponse.deserialize.tubes + get.mockReturnValue(saphyrTubesRequestFactory.responses.fetch) + const expectedTubes = saphyrTubesRequestFactory.storeData.data - const response = await Actions.getTractionTubesForBarcodes({ commit, getters }, barcodeList) + await Actions.getTractionTubesForBarcodes({ commit, getters }, barcodeList) expect(commit).toHaveBeenCalledWith('setTubes', expectedTubes) - expect(response).toEqual(expectedResponse) }) it('successfully for libraries', async () => { - get.mockReturnValue(Data.TubeWithLibrary) - - const expectedResponse = new Response(Data.TubeWithLibrary) - const expectedTubes = expectedResponse.deserialize.tubes + get.mockReturnValue(saphyrTubesLibraryFactory.responses.fetch) + const expectedTubes = saphyrTubesLibraryFactory.storeData.data const response = await Actions.getTractionTubesForBarcodes({ commit, getters }, barcodeList) expect(commit).toHaveBeenCalledWith('setTubes', expectedTubes) - expect(response).toEqual(expectedResponse) + expect(response.body.data).toEqual(saphyrTubesLibraryFactory.content.data) }) it('unsuccessfully', async () => { - get.mockReturnValue(failedResponse) - - const expectedResponse = new Response(failedResponse) - + const promise = Promise.reject(failedResponse) + get.mockReturnValue(promise) const response = await Actions.getTractionTubesForBarcodes({ commit, getters }, barcodeList) expect(commit).not.toHaveBeenCalled() - expect(response).toEqual(expectedResponse) + expect(response.success).toBeFalsy() + expect(response.errors).toEqual(failedResponse) }) it('when no tubes exist', async () => { - get.mockReturnValue(emptyResponse) - - const expectedResponse = new Response(emptyResponse) + const factory = SaphyrTubesFactory() + get.mockReturnValue(factory.responses.fetch) const response = await Actions.getTractionTubesForBarcodes({ commit, getters }, barcodeList) - expect(commit).not.toHaveBeenCalled() - expect(response).toEqual(expectedResponse) + expect(commit).toHaveBeenCalledWith('setTubes', factory.storeData.data) + expect(response.body.data).toEqual(factory.content.data) }) }) @@ -97,65 +98,61 @@ describe('#createLibrariesInTraction', () => { }) it('successfully', async () => { - const expectedResponse = new Response(Data.TubeWithLibrary) - create.mockReturnValue(Data.TubeWithLibrary) + create.mockReturnValue(saphyrTubesLibraryFactory.responses.fetch) const response = await Actions.createLibrariesInTraction({ getters }, payload) - expect(response).toEqual(expectedResponse) + expect(response.success).toBe(true) + expect(response.body.data).toEqual(saphyrTubesLibraryFactory.content.data) }) it('unsuccessfully', async () => { const failedResponse = { - status: 422, - statusText: 'Unprocessable Entity', - data: { errors: { name: ['error message'] } }, + errors: [ + { + title: 'Unprocessable Entity', + status: '422', + }, + ], } - const expectedResponse = new Response(failedResponse) - - create.mockReturnValue(failedResponse) + const promise = Promise.reject(failedResponse) + create.mockReturnValue(promise) const response = await Actions.createLibrariesInTraction({ getters }, payload) - expect(response).toEqual(expectedResponse) + expect(response.success).toBeFalsy() + expect(response.errors).toEqual(failedResponse) }) }) describe('#deleteLibraries', () => { - let destroy, getters, libraryIds, failedResponse + let destroy, getters, libraryIds beforeEach(() => { destroy = vi.fn() getters = { libraryRequest: { destroy: destroy } } libraryIds = [1, 2] - - failedResponse = { data: { data: [] }, status: 500, statusText: 'Internal Server Error' } }) it('successfully', async () => { - const mockResponse = { data: {}, status: 204, statusText: 'OK' } - - const promise = new Promise((resolve) => { - resolve(mockResponse) - }) - - destroy.mockReturnValue([promise]) - - const expectedResponse = new Response(mockResponse) + const factory = BaseFactory({}) + destroy.mockReturnValue([Promise.resolve(factory.responses.fetch)]) const response = await Actions.deleteLibraries({ getters }, libraryIds) - - expect(response).toEqual([expectedResponse]) + expect(response[0].success).toBe(true) + expect(response[0].body).toEqual(factory.content) }) it('unsuccessfully', async () => { - const promise = new Promise((reject) => { - reject(failedResponse) - }) - - destroy.mockReturnValue([promise]) - - const expectedResponse = new Response(failedResponse) + const failedResponse = { + errors: [ + { + title: 'Unprocessable Entity', + status: '422', + }, + ], + } + destroy.mockReturnValue([Promise.reject(failedResponse)]) const response = await Actions.deleteLibraries({ getters }, libraryIds) - expect(response).toEqual([expectedResponse]) + expect(response[0].errors).toEqual(failedResponse) }) }) @@ -171,7 +168,7 @@ describe('#setLibraries', () => { }) it('successfully', async () => { - get.mockReturnValue(Data.TractionSaphyrLibraries) + get.mockReturnValue(saphyrTubesLibraryFactory.responses.fetch) const libraries = await Actions.setLibraries({ commit, getters }) diff --git a/tests/unit/views/saphyr/SaphyrLibraries.spec.js b/tests/unit/views/saphyr/SaphyrLibraries.spec.js index 7d15aeeca..b33a45ce1 100644 --- a/tests/unit/views/saphyr/SaphyrLibraries.spec.js +++ b/tests/unit/views/saphyr/SaphyrLibraries.spec.js @@ -1,6 +1,6 @@ import Libraries from '@/views/saphyr/SaphyrLibraries' -import { mount, store, Data, createTestingPinia } from '@support/testHelper' -import Response from '@/api/v1/Response' +import { mount, store, createTestingPinia } from '@support/testHelper' +import SaphyrLibrariesFactory from '@tests/factories/SaphyrLibrariesFactory.js' function mountWithStore({ props } = {}) { const wrapperObj = mount(Libraries, { @@ -17,37 +17,12 @@ function mountWithStore({ props } = {}) { }) return { wrapperObj } } - +const saphyrLibrariesFactory = SaphyrLibrariesFactory() describe('Libraries.vue', () => { let wrapper, libraries, mockLibraries beforeEach(() => { - mockLibraries = [ - { - id: 1, - barcode: 'TRAC-8', - material: { - id: 6, - type: 'libraries', - state: 'pending', - sample_name: 'sample_d', - enzyme_name: 'Nb.BsrDI', - created_at: '03/12/2019 11:49', - }, - }, - { - id: 2, - barcode: 'TRAC-9', - material: { - id: 6, - type: 'libraries', - state: 'pending', - sample_name: 'sample_d', - enzyme_name: 'Nb.BsrDI', - created_at: '03/12/2019 11:49', - }, - }, - ] + mockLibraries = Object.values(saphyrLibrariesFactory.storeData.dataArray) // We mock the request response, to allow the provider to trigger our // behaviour for us. We might be better of mocking the action itself, but @@ -55,7 +30,7 @@ describe('Libraries.vue', () => { // Before we used to inject the state directly, but that caused issues // when the component triggered the set requests action itself. vi.spyOn(store.getters['traction/saphyr/tubes/libraryRequest'], 'get').mockResolvedValue( - Data.TractionSaphyrLibraries, + saphyrLibrariesFactory.responses.fetch, ) const { wrapperObj } = mountWithStore() @@ -85,23 +60,27 @@ describe('Libraries.vue', () => { }) it('calls the correct functions', async () => { - libraries.deleteLibraries.mockReturnValue([new Response(Data.TractionSaphyrLibraries)]) + libraries.deleteLibraries.mockReturnValue([{ success: true }]) await libraries.handleLibraryDelete() + const barcodes = mockLibraries.map((s) => s.barcode).join(', ') expect(libraries.deleteLibraries).toBeCalledWith(mockLibraries.map((s) => s.id)) expect(libraries.showAlert).toBeCalledWith( - 'Libraries TRAC-8, TRAC-9 successfully deleted', + `Libraries ${barcodes} successfully deleted`, 'success', ) }) it('calls showAlert when there is an error', async () => { const failedResponse = { - status: 422, - statusText: 'Unprocessable Entity', - data: { data: { errors: { it: ['did not work'] } } }, + errors: [ + { + title: 'Unprocessable Entity', + status: '422', + }, + ], } - libraries.deleteLibraries.mockReturnValue([new Response(failedResponse)]) + libraries.deleteLibraries.mockReturnValue([failedResponse]) await libraries.handleLibraryDelete()