From 5a15847c4a0031d956c2a0abb516df97ee2c9de3 Mon Sep 17 00:00:00 2001 From: Bastian Wagner Date: Wed, 11 Mar 2026 14:41:57 +0100 Subject: [PATCH] Unit Tests Frontend --- client/angular.json | 6 +- client/package-lock.json | 301 ++++++++---------- client/package.json | 6 +- client/setup-jest.ts | 3 - client/src/app/core/auth/auth.guard.ts | 2 - .../cylinder-archive.component.spec.ts | 23 -- .../delete-key-from-archive.component.html | 20 ++ .../delete-key-from-archive.component.scss | 0 .../delete-key-from-archive.component.spec.ts | 23 ++ .../delete-key-from-archive.component.ts | 18 ++ ...-cylinder-systems-dialog.component.spec.ts | 23 -- .../system-archive.component.spec.ts | 23 -- .../shared/ag-grid/ag-grid.service.spec.ts | 16 - .../ag-delete-system.component.spec.ts | 23 -- .../ag-grid-container.component.spec.ts | 23 -- client/src/test-setup.ts | 13 +- client/tsconfig.spec.json | 15 +- client/vitest.config.ts | 15 - 18 files changed, 211 insertions(+), 342 deletions(-) delete mode 100644 client/setup-jest.ts delete mode 100644 client/src/app/modules/cylinder/components/cylinder-archive/cylinder-archive.component.spec.ts create mode 100644 client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.html create mode 100644 client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.scss create mode 100644 client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.spec.ts create mode 100644 client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.ts delete mode 100644 client/src/app/modules/keys/create/select-key-cylinder/multiple-cylinder-systems-dialog/multiple-cylinder-systems-dialog.component.spec.ts delete mode 100644 client/src/app/modules/system/components/system-archive/system-archive.component.spec.ts delete mode 100644 client/src/app/shared/ag-grid/ag-grid.service.spec.ts delete mode 100644 client/src/app/shared/ag-grid/components/ag-delete-system/ag-delete-system.component.spec.ts delete mode 100644 client/src/app/shared/ag-grid/components/ag-grid-container/ag-grid-container.component.spec.ts delete mode 100644 client/vitest.config.ts diff --git a/client/angular.json b/client/angular.json index 15442ed..6331e53 100644 --- a/client/angular.json +++ b/client/angular.json @@ -89,7 +89,11 @@ "defaultConfiguration": "development" }, "test": { - "builder": "@angular/build:unit-test" + "builder": "@angular/build:unit-test", + "options": { + "tsConfig": "tsconfig.spec.json", + "setupFiles": ["src/test-setup.ts"] + } }, "extract-i18n": { "builder": "@angular/build:extract-i18n" diff --git a/client/package-lock.json b/client/package-lock.json index 954df87..ae9384f 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -30,14 +30,14 @@ "zone.js": "~0.15.1" }, "devDependencies": { - "@analogjs/vitest-angular": "^2.2.3", "@angular/build": "^21.1.4", "@angular/cli": "^21.1.4", "@angular/compiler-cli": "^21.1.4", "@faker-js/faker": "^9.0.3", "@vitest/coverage-v8": "^4.0.18", + "@vitest/ui": "^4.0.18", "autoprefixer": "^10.4.20", - "jsdom": "^28.0.0", + "jsdom": "^28.1.0", "postcss": "^8.4.49", "tailwindcss": "^3.4.16", "ts-node": "^10.9.2", @@ -294,49 +294,6 @@ "node": ">=6.0.0" } }, - "node_modules/@analogjs/vite-plugin-angular": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@analogjs/vite-plugin-angular/-/vite-plugin-angular-2.2.3.tgz", - "integrity": "sha512-OqVfiJsaHdHMxzvK0heVvp8MenSXh+xib6/p+v3d44kJ3J7ooD4gRx/jKC350zkgRKwcZc3a0ybGUnG6LEF7mg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ts-morph": "^21.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/brandonroberts" - }, - "peerDependencies": { - "@angular-devkit/build-angular": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0", - "@angular/build": "^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0" - }, - "peerDependenciesMeta": { - "@angular-devkit/build-angular": { - "optional": true - }, - "@angular/build": { - "optional": true - } - } - }, - "node_modules/@analogjs/vitest-angular": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@analogjs/vitest-angular/-/vitest-angular-2.2.3.tgz", - "integrity": "sha512-514A8RqT4sQnWj/3pHnoGrvDLYjcUTWL3d00GCQ4MVRUpisUg2R8tC/PZ/3ZARK5SskIwy5LwPEg4RFX0iOSug==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/brandonroberts" - }, - "peerDependencies": { - "@analogjs/vite-plugin-angular": "*", - "@angular-devkit/architect": ">=0.1500.0 < 0.2200.0", - "vitest": "^1.3.1 || ^2.0.0 || ^3.0.0 || ^4.0.0" - } - }, "node_modules/@angular-devkit/architect": { "version": "0.2101.4", "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2101.4.tgz", @@ -1784,17 +1741,20 @@ } }, "node_modules/@asamuzakjp/css-color": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.2.tgz", - "integrity": "sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.0.1.tgz", + "integrity": "sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==", "dev": true, "license": "MIT", "dependencies": { - "@csstools/css-calc": "^3.0.0", - "@csstools/css-color-parser": "^4.0.1", + "@csstools/css-calc": "^3.1.1", + "@csstools/css-color-parser": "^4.0.2", "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0", - "lru-cache": "^11.2.5" + "lru-cache": "^11.2.6" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { @@ -1808,9 +1768,9 @@ } }, "node_modules/@asamuzakjp/dom-selector": { - "version": "6.7.8", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.7.8.tgz", - "integrity": "sha512-stisC1nULNc9oH5lakAj8MH88ZxeGxzyWNDfbdCxvJSJIvDsHNZqYvscGTgy/ysgXWLJPt6K/4t0/GjvtKcFJQ==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz", + "integrity": "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1818,7 +1778,7 @@ "bidi-js": "^1.0.3", "css-tree": "^3.1.0", "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.2.5" + "lru-cache": "^11.2.6" } }, "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { @@ -2116,6 +2076,19 @@ "node": ">=6.9.0" } }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -2141,9 +2114,9 @@ } }, "node_modules/@csstools/color-helpers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.1.tgz", - "integrity": "sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz", + "integrity": "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==", "dev": true, "funding": [ { @@ -2185,9 +2158,9 @@ } }, "node_modules/@csstools/css-color-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.1.tgz", - "integrity": "sha512-vYwO15eRBEkeF6xjAno/KQ61HacNhfQuuU/eGwH67DplL0zD5ZixUa563phQvUelA07yDczIXdtmYojCphKJcw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.2.tgz", + "integrity": "sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==", "dev": true, "funding": [ { @@ -2201,8 +2174,8 @@ ], "license": "MIT", "dependencies": { - "@csstools/color-helpers": "^6.0.1", - "@csstools/css-calc": "^3.0.0" + "@csstools/color-helpers": "^6.0.2", + "@csstools/css-calc": "^3.1.1" }, "engines": { "node": ">=20.19.0" @@ -2236,9 +2209,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.0.27", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.27.tgz", - "integrity": "sha512-sxP33Jwg1bviSUXAV43cVYdmjt2TLnLXNqCWl9xmxHawWVjGz/kEbdkr7F9pxJNBN2Mh+dq0crgItbW6tQvyow==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.0.tgz", + "integrity": "sha512-H4tuz2nhWgNKLt1inYpoVCfbJbMwX/lQKp3g69rrrIMIYlFD9+zTykOKhNR8uGrAmbS/kT9n6hTFkmDkxLgeTA==", "dev": true, "funding": [ { @@ -4882,6 +4855,13 @@ "node": ">=14" } }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, "node_modules/@rolldown/binding-android-arm64": { "version": "1.0.0-beta.58", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.58.tgz", @@ -5540,65 +5520,6 @@ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "license": "MIT" }, - "node_modules/@ts-morph/common": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.22.0.tgz", - "integrity": "sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-glob": "^3.3.2", - "minimatch": "^9.0.3", - "mkdirp": "^3.0.1", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@ts-morph/common/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -5904,6 +5825,28 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/ui": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.0.18.tgz", + "integrity": "sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.0.18", + "fflate": "^0.8.2", + "flatted": "^3.3.3", + "pathe": "^2.0.3", + "sirv": "^3.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "4.0.18" + } + }, "node_modules/@vitest/utils": { "version": "4.0.18", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", @@ -6742,14 +6685,6 @@ "node": ">= 12" } }, - "node_modules/code-block-writer": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", - "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -6892,14 +6827,14 @@ } }, "node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", "dev": true, "license": "MIT", "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" @@ -6931,16 +6866,16 @@ } }, "node_modules/cssstyle": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.7.tgz", - "integrity": "sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.2.0.tgz", + "integrity": "sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^4.1.1", - "@csstools/css-syntax-patches-for-csstree": "^1.0.21", + "@asamuzakjp/css-color": "^5.0.1", + "@csstools/css-syntax-patches-for-csstree": "^1.0.28", "css-tree": "^3.1.0", - "lru-cache": "^11.2.4" + "lru-cache": "^11.2.6" }, "engines": { "node": ">=20" @@ -7573,6 +7508,13 @@ } } }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true, + "license": "MIT" + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -7585,6 +7527,13 @@ "node": ">=8" } }, + "node_modules/flatted": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.1.tgz", + "integrity": "sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==", + "dev": true, + "license": "ISC" + }, "node_modules/foreground-child": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", @@ -8332,16 +8281,17 @@ "license": "MIT" }, "node_modules/jsdom": { - "version": "28.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.0.0.tgz", - "integrity": "sha512-KDYJgZ6T2TKdU8yBfYueq5EPG/EylMsBvCaenWMJb2OXmjgczzwveRCoJ+Hgj1lXPDyasvrgneSn4GBuR1hYyA==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.1.0.tgz", + "integrity": "sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==", "dev": true, "license": "MIT", "dependencies": { "@acemir/cssom": "^0.9.31", - "@asamuzakjp/dom-selector": "^6.7.6", + "@asamuzakjp/dom-selector": "^6.8.1", + "@bramus/specificity": "^2.4.2", "@exodus/bytes": "^1.11.0", - "cssstyle": "^5.3.7", + "cssstyle": "^6.0.1", "data-urls": "^7.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", @@ -8352,7 +8302,7 @@ "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.0", - "undici": "^7.20.0", + "undici": "^7.21.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.1", "whatwg-mimetype": "^5.0.0", @@ -8779,9 +8729,9 @@ } }, "node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", "dev": true, "license": "CC0-1.0" }, @@ -9633,14 +9583,6 @@ "node": ">= 0.8" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -10709,6 +10651,21 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/slice-ansi": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", @@ -11267,6 +11224,16 @@ "node": ">=0.6" } }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/tough-cookie": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", @@ -11310,18 +11277,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/ts-morph": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-21.0.1.tgz", - "integrity": "sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ts-morph/common": "~0.22.0", - "code-block-writer": "^12.0.0" - } - }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", diff --git a/client/package.json b/client/package.json index f8501ce..03674cb 100644 --- a/client/package.json +++ b/client/package.json @@ -35,14 +35,14 @@ "zone.js": "~0.15.1" }, "devDependencies": { - "@analogjs/vitest-angular": "^2.2.3", "@angular/build": "^21.1.4", "@angular/cli": "^21.1.4", "@angular/compiler-cli": "^21.1.4", "@faker-js/faker": "^9.0.3", "@vitest/coverage-v8": "^4.0.18", + "@vitest/ui": "^4.0.18", "autoprefixer": "^10.4.20", - "jsdom": "^28.0.0", + "jsdom": "^28.1.0", "postcss": "^8.4.49", "tailwindcss": "^3.4.16", "ts-node": "^10.9.2", @@ -50,4 +50,4 @@ "vite": "^7.3.1", "vitest": "^4.0.18" } -} \ No newline at end of file +} diff --git a/client/setup-jest.ts b/client/setup-jest.ts deleted file mode 100644 index 1337ff0..0000000 --- a/client/setup-jest.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; - -setupZoneTestEnv(); \ No newline at end of file diff --git a/client/src/app/core/auth/auth.guard.ts b/client/src/app/core/auth/auth.guard.ts index 0cdb793..9575e61 100644 --- a/client/src/app/core/auth/auth.guard.ts +++ b/client/src/app/core/auth/auth.guard.ts @@ -1,6 +1,5 @@ import { inject, Injectable } from "@angular/core"; import { ActivatedRouteSnapshot, Router } from "@angular/router"; -import { HotToastService } from "@ngxpert/hot-toast"; import { AuthService } from "./auth.service"; @Injectable({ @@ -9,7 +8,6 @@ import { AuthService } from "./auth.service"; export class AuthenticatedGuard { public isLoading = false; private router = inject(Router); - private toast = inject(HotToastService); private authService = inject(AuthService); async canActivate(route: ActivatedRouteSnapshot): diff --git a/client/src/app/modules/cylinder/components/cylinder-archive/cylinder-archive.component.spec.ts b/client/src/app/modules/cylinder/components/cylinder-archive/cylinder-archive.component.spec.ts deleted file mode 100644 index d747b5b..0000000 --- a/client/src/app/modules/cylinder/components/cylinder-archive/cylinder-archive.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { CylinderArchiveComponent } from './cylinder-archive.component'; - -describe('CylinderArchiveComponent', () => { - let component: CylinderArchiveComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [CylinderArchiveComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(CylinderArchiveComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.html b/client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.html new file mode 100644 index 0000000..ea8ee2f --- /dev/null +++ b/client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.html @@ -0,0 +1,20 @@ +

Schlüssel {{key.name}} löschen?

+ +
+ warning +

+ {{key.name}} wirklich endgültig löschen? +

+

+ + Gelöschte Schlüssel können nicht mehr wiederhergestellt werden +

+
+
+ + + + \ No newline at end of file diff --git a/client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.scss b/client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.spec.ts b/client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.spec.ts new file mode 100644 index 0000000..2159434 --- /dev/null +++ b/client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DeleteKeyFromArchiveComponent } from './delete-key-from-archive.component'; + +describe('DeleteKeyFromArchiveComponent', () => { + let component: DeleteKeyFromArchiveComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DeleteKeyFromArchiveComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(DeleteKeyFromArchiveComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.ts b/client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.ts new file mode 100644 index 0000000..f8ff022 --- /dev/null +++ b/client/src/app/modules/keys/components/archive/delete-key-from-archive/delete-key-from-archive.component.ts @@ -0,0 +1,18 @@ +import { Component, inject } from '@angular/core'; +import { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog'; +import { IKey } from '../../../../../model/interface/key.interface'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; + +@Component({ + selector: 'app-delete-key-from-archive', + imports: [MatDialogModule, MatButtonModule, MatIconModule], + templateUrl: './delete-key-from-archive.component.html', + styleUrl: './delete-key-from-archive.component.scss', +}) +export class DeleteKeyFromArchiveComponent { + + readonly dialogRef = inject(MatDialogRef); + readonly key = inject(MAT_DIALOG_DATA); + +} diff --git a/client/src/app/modules/keys/create/select-key-cylinder/multiple-cylinder-systems-dialog/multiple-cylinder-systems-dialog.component.spec.ts b/client/src/app/modules/keys/create/select-key-cylinder/multiple-cylinder-systems-dialog/multiple-cylinder-systems-dialog.component.spec.ts deleted file mode 100644 index 33247f9..0000000 --- a/client/src/app/modules/keys/create/select-key-cylinder/multiple-cylinder-systems-dialog/multiple-cylinder-systems-dialog.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MultipleCylinderSystemsDialogComponent } from './multiple-cylinder-systems-dialog.component'; - -describe('MultipleCylinderSystemsDialogComponent', () => { - let component: MultipleCylinderSystemsDialogComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [MultipleCylinderSystemsDialogComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(MultipleCylinderSystemsDialogComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/modules/system/components/system-archive/system-archive.component.spec.ts b/client/src/app/modules/system/components/system-archive/system-archive.component.spec.ts deleted file mode 100644 index d2cf062..0000000 --- a/client/src/app/modules/system/components/system-archive/system-archive.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { SystemArchiveComponent } from './system-archive.component'; - -describe('SystemArchiveComponent', () => { - let component: SystemArchiveComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [SystemArchiveComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(SystemArchiveComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/shared/ag-grid/ag-grid.service.spec.ts b/client/src/app/shared/ag-grid/ag-grid.service.spec.ts deleted file mode 100644 index 1ce66a5..0000000 --- a/client/src/app/shared/ag-grid/ag-grid.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { AgGridService } from './ag-grid.service'; - -describe('AgGridService', () => { - let service: AgGridService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(AgGridService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/client/src/app/shared/ag-grid/components/ag-delete-system/ag-delete-system.component.spec.ts b/client/src/app/shared/ag-grid/components/ag-delete-system/ag-delete-system.component.spec.ts deleted file mode 100644 index 8172754..0000000 --- a/client/src/app/shared/ag-grid/components/ag-delete-system/ag-delete-system.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AgDeleteSystemComponent } from './ag-delete-system.component'; - -describe('AgDeleteSystemComponent', () => { - let component: AgDeleteSystemComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [AgDeleteSystemComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(AgDeleteSystemComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/shared/ag-grid/components/ag-grid-container/ag-grid-container.component.spec.ts b/client/src/app/shared/ag-grid/components/ag-grid-container/ag-grid-container.component.spec.ts deleted file mode 100644 index 012daf0..0000000 --- a/client/src/app/shared/ag-grid/components/ag-grid-container/ag-grid-container.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AgGridContainerComponent } from './ag-grid-container.component'; - -describe('AgGridContainerComponent', () => { - let component: AgGridContainerComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [AgGridContainerComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(AgGridContainerComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/test-setup.ts b/client/src/test-setup.ts index 37fe228..17be93f 100644 --- a/client/src/test-setup.ts +++ b/client/src/test-setup.ts @@ -1,12 +1 @@ -import 'zone.js/testing'; -import { TestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting, -} from '@angular/platform-browser-dynamic/testing'; - -// Wichtig: Initialisiert Angulars Test-Environment (wie früher in test.ts) -TestBed.initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); \ No newline at end of file +import '@angular/compiler'; \ No newline at end of file diff --git a/client/tsconfig.spec.json b/client/tsconfig.spec.json index dc1e203..a2403ca 100644 --- a/client/tsconfig.spec.json +++ b/client/tsconfig.spec.json @@ -1,5 +1,16 @@ { + "extends": "./tsconfig.json", "compilerOptions": { - "types": ["vitest/globals", "node"] - } + "outDir": "./out-tsc/spec", + "types": ["vitest/globals", "node"], + "module": "esnext", + "moduleResolution": "bundler", + "target": "es2022" + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.test.ts", + "src/**/*.d.ts", + "src/test-setup.ts" + ] } \ No newline at end of file diff --git a/client/vitest.config.ts b/client/vitest.config.ts deleted file mode 100644 index 02bdeb6..0000000 --- a/client/vitest.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { defineConfig } from 'vitest/config'; - -export default defineConfig({ - test: { - globals: true, - environment: 'jsdom', - setupFiles: ['src/test-setup.ts'], - include: ['src/**/*.spec.ts'], - coverage: { - provider: 'v8', - reporter: ['text', 'html'], - reportsDirectory: './coverage' - } - } -}); \ No newline at end of file