diff --git a/.github/dependabot.yml b/.github/dependabot.yml index eb7b8e1e..0e19d509 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,7 +6,9 @@ version: 2 updates: - package-ecosystem: "github-actions" - directory: "/" + directories: + - "/" + - "/.github/actions/*/" open-pull-requests-limit: 20 target-branch: "dev" schedule: diff --git a/.github/workflows/backend-ci.yml b/.github/workflows/backend-ci.yml index dcbf6097..b59e9510 100644 --- a/.github/workflows/backend-ci.yml +++ b/.github/workflows/backend-ci.yml @@ -195,6 +195,29 @@ jobs: comment-identifier: "${{ env.WORKFLOW_SHORT_NAME }}-CodeCoverageSummary" comment-content: ${{ steps.code-coverage-summary.outputs.markdown }} + - name: Stryker + id: stryker + run: | + dotnet stryker --reporter "html" --reporter "json" --reporter "markdown" --solution Backend.sln --output StrykerOutput + cp -r StrykerOutput/reports StrykerReports + cat StrykerReports/mutation-report.md >> $GITHUB_STEP_SUMMARY + echo "markdown<> $GITHUB_OUTPUT + cat StrykerReports/mutation-report.md >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + - uses: actions/upload-artifact@v4 + with: + name: StrykerReports + path: ${{ env.BACKEND_SOLUTION_PATH }}/StrykerReports + + - name: "Create or Update PR Comment" + uses: im-open/update-pr-comment@v1.2.2 + if: ${{ always() && github.event_name == 'pull_request' }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + comment-identifier: "${{ env.WORKFLOW_SHORT_NAME }}-Stryker" + comment-content: ${{ steps.stryker.outputs.markdown }} + - name: Inspect code uses: muno92/resharper_inspectcode@v1 if: ${{ github.event_name == 'pull_request' }} diff --git a/src/backend/.config/dotnet-tools.json b/src/backend/.config/dotnet-tools.json index 31cea78f..f25bf872 100644 --- a/src/backend/.config/dotnet-tools.json +++ b/src/backend/.config/dotnet-tools.json @@ -3,21 +3,21 @@ "isRoot": true, "tools": { "dotnet-ef": { - "version": "8.0.7", + "version": "8.0.10", "commands": [ "dotnet-ef" ], "rollForward": false }, "dotnet-reportgenerator-globaltool": { - "version": "5.3.9", + "version": "5.3.11", "commands": [ "reportgenerator" ], "rollForward": false }, "swashbuckle.aspnetcore.cli": { - "version": "6.7.3", + "version": "6.8.0", "commands": [ "swagger" ], diff --git a/src/backend/WebApi/WebApi.csproj b/src/backend/WebApi/WebApi.csproj index 2677760a..e5a94162 100644 --- a/src/backend/WebApi/WebApi.csproj +++ b/src/backend/WebApi/WebApi.csproj @@ -29,8 +29,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/src/backend/WebApi/packages.lock.json b/src/backend/WebApi/packages.lock.json index 81b9ffe5..7b8ea17d 100644 --- a/src/backend/WebApi/packages.lock.json +++ b/src/backend/WebApi/packages.lock.json @@ -127,21 +127,21 @@ }, "Swashbuckle.AspNetCore": { "type": "Direct", - "requested": "[6.7.3, )", - "resolved": "6.7.3", - "contentHash": "PYTm/M5YrkEUHmguhj6vF1DshG2deKMMcsnhKet1BkcKzZHNX/VVQady0T/jNpXrtxhLR3vB10hWhONF1Nbglw==", + "requested": "[6.8.0, )", + "resolved": "6.8.0", + "contentHash": "0Mk8/31efsxFNVeFzLjUVYDFTjYKtEi2UCSaI9+HIkSQ/duu++28gfq1+gwWDRLHkRMOkUgoWMLe0UoayAZySA==", "dependencies": { "Microsoft.Extensions.ApiDescription.Server": "6.0.5", - "Swashbuckle.AspNetCore.Swagger": "6.7.3", - "Swashbuckle.AspNetCore.SwaggerGen": "6.7.3", - "Swashbuckle.AspNetCore.SwaggerUI": "6.7.3" + "Swashbuckle.AspNetCore.Swagger": "6.8.0", + "Swashbuckle.AspNetCore.SwaggerGen": "6.8.0", + "Swashbuckle.AspNetCore.SwaggerUI": "6.8.0" } }, "Swashbuckle.AspNetCore.ReDoc": { "type": "Direct", - "requested": "[6.7.3, )", - "resolved": "6.7.3", - "contentHash": "TaefpygyLmCAT6AESpBy2yWnUisfSDhLxXhz1u9T0QVXb7wiPmuoRpUcox4Yy/djPMfXczyHsj4uq7iFxP9/vg==" + "requested": "[6.8.0, )", + "resolved": "6.8.0", + "contentHash": "+1/onHsvCrQWi0ShlMth/Rn0QXVwBs32G52lacVe50V8TEGhs3Aml4byNJyb/VMG5Fx+S+camhsfL/VQMWAkiA==" }, "Azure.Core": { "type": "Transitive", @@ -613,24 +613,24 @@ }, "Swashbuckle.AspNetCore.Swagger": { "type": "Transitive", - "resolved": "6.7.3", - "contentHash": "plNVrOpup/UCIP0aSE5cznIzXMC17EOOqIceWqhP829evEAUwTomCc+1TPy2xK2E+OilYcYEdUus3rOUMjjm/g==", + "resolved": "6.8.0", + "contentHash": "f6Utk5eLFWRJbDFIqHGeb9Kb+w/9b+z0WIJUIAPY4hP263MPXI8ZbejdOktS10gvCLaQ3YCFl6fAVlCIUFKsRQ==", "dependencies": { "Microsoft.OpenApi": "1.6.14" } }, "Swashbuckle.AspNetCore.SwaggerGen": { "type": "Transitive", - "resolved": "6.7.3", - "contentHash": "kvjGd+g85YFZqyEQZSBUCPtEDDCZsiPPYcjgBN6si3C3oik2c9d7Zlq4PIm07pgY/QmBMgyFOVEzHbks6a398w==", + "resolved": "6.8.0", + "contentHash": "bmWglb1jeKD+tUE56wL2zE6lnlpJZbgDLXMlEOgl8xTqEs9g8C6eNNKGuMcnfxFt0CgZaBClaDqad2JDjZW5Fw==", "dependencies": { - "Swashbuckle.AspNetCore.Swagger": "6.7.3" + "Swashbuckle.AspNetCore.Swagger": "6.8.0" } }, "Swashbuckle.AspNetCore.SwaggerUI": { "type": "Transitive", - "resolved": "6.7.3", - "contentHash": "exXUT9h++OU70jTCfQALiHzeBthqL7c5IFQm+aa67Hi/6X945t32NtOMO16TaRn44xFXdqMZ2CyMbgnTmx+w2A==" + "resolved": "6.8.0", + "contentHash": "tG1FL+aFmmuqZ3eKVHgvSFvrzJoKbDzOmvK8YACucfbIBYfHQd45uQ18MhMF3xDaR46qdggdaHGqmfYo+nxwrw==" }, "System.CodeDom": { "type": "Transitive", diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json index 85d625e1..d02ddd97 100644 --- a/src/frontend/package-lock.json +++ b/src/frontend/package-lock.json @@ -9,8 +9,8 @@ "version": "0.0.1", "license": "MIT", "dependencies": { - "@tanstack/react-query": "^5.51.3", - "@tanstack/react-query-devtools": "^5.56.2", + "@tanstack/react-query": "^5.59.0", + "@tanstack/react-query-devtools": "^5.59.8", "axios": "^1.6.8", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -50,7 +50,7 @@ "orval": "^7.1.0", "prettier": "^3.3.2", "typescript": "^5.2.2", - "typescript-eslint": "^7.16.1", + "typescript-eslint": "^8.8.1", "vite": "^5.4.7", "vite-plugin-mkcert": "^1.17.5", "vitest": "^2.0.3" @@ -3362,29 +3362,29 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.56.2", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.56.2.tgz", - "integrity": "sha512-gor0RI3/R5rVV3gXfddh1MM+hgl0Z4G7tj6Xxpq6p2I03NGPaJ8dITY9Gz05zYYb/EJq9vPas/T4wn9EaDPd4Q==", + "version": "5.59.6", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.59.6.tgz", + "integrity": "sha512-g58YTHe4ClRrjJ50GY9fas/0zARJVozY0Hs+hcSBOmwZaeKY+to0/LX8wKnnH/EJiLYcC1sHmE11CAS3ncfZBg==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/query-devtools": { - "version": "5.56.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.56.1.tgz", - "integrity": "sha512-xnp9jq/9dHfSCDmmf+A5DjbIjYqbnnUL2ToqlaaviUQGRTapXQ8J+GxusYUu1IG0vZMaWdiVUA4HRGGZYAUU+A==", + "version": "5.58.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.58.0.tgz", + "integrity": "sha512-iFdQEFXaYYxqgrv63ots+65FGI+tNp5ZS5PdMU1DWisxk3fez5HG3FyVlbUva+RdYS5hSLbxZ9aw3yEs97GNTw==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "5.56.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.56.2.tgz", - "integrity": "sha512-SR0GzHVo6yzhN72pnRhkEFRAHMsUo5ZPzAxfTMvUxFIDVS6W9LYUp6nXW3fcHVdg0ZJl8opSH85jqahvm6DSVg==", + "version": "5.59.8", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.59.8.tgz", + "integrity": "sha512-jkvObpbjBL6P/PHFIjvNGG19XyhI8sjP6/Mw7CbmgT6SAps/5fZY5pxDicRwAt1YGCiEQvwrJQ6IdbZ8j5CVfw==", "dependencies": { - "@tanstack/query-core": "5.56.2" + "@tanstack/query-core": "5.59.6" }, "funding": { "type": "github", @@ -3395,18 +3395,18 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.56.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.56.2.tgz", - "integrity": "sha512-7nINJtRZZVwhTTyDdMIcSaXo+EHMLYJu1S2e6FskvvD5prx87LlAXXWZDfU24Qm4HjshEtM5lS3HIOszNGblcw==", + "version": "5.59.8", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.59.8.tgz", + "integrity": "sha512-zcuPadRnbGcOz5YIPDbX2Tbpf0cFsoSACYdQzhRv7R2tyJxFby3u9bn4y1TaYTWSEolH8PlCklznEkS7F2OqFQ==", "dependencies": { - "@tanstack/query-devtools": "5.56.1" + "@tanstack/query-devtools": "5.58.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.56.2", + "@tanstack/react-query": "^5.59.8", "react": "^18 || ^19" } }, @@ -3653,16 +3653,16 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", - "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/type-utils": "7.16.1", - "@typescript-eslint/utils": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -3686,15 +3686,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz", - "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/typescript-estree": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "engines": { @@ -3713,14 +3713,27 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", - "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3730,14 +3743,27 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", - "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.16.1", - "@typescript-eslint/utils": "7.16.1", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -3771,13 +3797,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", - "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3798,16 +3824,29 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", - "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/typescript-estree": "7.16.1" + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3820,13 +3859,26 @@ "eslint": "^8.56.0" } }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", - "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -3837,6 +3889,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -5601,6 +5666,32 @@ "typescript": "*" } }, + "node_modules/eslint-config-love/node_modules/typescript-eslint": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.18.0.tgz", + "integrity": "sha512-PonBkP603E3tt05lDkbOMyaxJjvKqQrXsnow72sVeOFINDE/qNmnnd+f9b4N+U7W6MXnnYyrhtmF2t08QWwUbA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", + "@typescript-eslint/utils": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/eslint-config-prettier": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", @@ -10143,24 +10234,164 @@ } }, "node_modules/typescript-eslint": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.16.1.tgz", - "integrity": "sha512-889oE5qELj65q/tGeOSvlreNKhimitFwZqQ0o7PcWC7/lgRkAMknznsCsV8J8mZGTP/Z+cIbX8accf2DE33hrA==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.8.1.tgz", + "integrity": "sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ==", "dev": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "7.16.1", - "@typescript-eslint/parser": "7.16.1", - "@typescript-eslint/utils": "7.16.1" + "@typescript-eslint/eslint-plugin": "8.8.1", + "@typescript-eslint/parser": "8.8.1", + "@typescript-eslint/utils": "8.8.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.1.tgz", + "integrity": "sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.8.1", + "@typescript-eslint/type-utils": "8.8.1", + "@typescript-eslint/utils": "8.8.1", + "@typescript-eslint/visitor-keys": "8.8.1", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.1.tgz", + "integrity": "sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.8.1", + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/typescript-estree": "8.8.1", + "@typescript-eslint/visitor-keys": "8.8.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz", + "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/visitor-keys": "8.8.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.1.tgz", + "integrity": "sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.8.1", + "@typescript-eslint/utils": "8.8.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz", + "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz", + "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/visitor-keys": "8.8.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { "typescript": { @@ -10168,6 +10399,45 @@ } } }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.1.tgz", + "integrity": "sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.8.1", + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/typescript-estree": "8.8.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz", + "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.8.1", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", diff --git a/src/frontend/package.json b/src/frontend/package.json index 2a3ec468..ae51dbf1 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -18,8 +18,8 @@ "coverage": "vitest run --coverage" }, "dependencies": { - "@tanstack/react-query": "^5.51.3", - "@tanstack/react-query-devtools": "^5.56.2", + "@tanstack/react-query": "^5.59.0", + "@tanstack/react-query-devtools": "^5.59.8", "axios": "^1.6.8", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -59,7 +59,7 @@ "orval": "^7.1.0", "prettier": "^3.3.2", "typescript": "^5.2.2", - "typescript-eslint": "^7.16.1", + "typescript-eslint": "^8.8.1", "vite": "^5.4.7", "vite-plugin-mkcert": "^1.17.5", "vitest": "^2.0.3" diff --git a/tests/backend/WebApi.Tests/Controllers/BloggingControllerTests.cs b/tests/backend/WebApi.Tests/Controllers/BloggingControllerTests.cs index 32f8fd24..18848eda 100644 --- a/tests/backend/WebApi.Tests/Controllers/BloggingControllerTests.cs +++ b/tests/backend/WebApi.Tests/Controllers/BloggingControllerTests.cs @@ -44,6 +44,8 @@ public async Task GetBlogs_ReturnsListOfBlogs() var returnedBlogs = okResult.Value as IEnumerable; Assert.That(returnedBlogs, Is.Not.Null); Assert.That(returnedBlogs.Count(), Is.EqualTo(2)); + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "GetBlogs was called"); + _loggerMock.VerifyNoError(); } [Test] @@ -66,6 +68,9 @@ public async Task GetBlog_ValidId_ReturnsBlog() Assert.That(returnedBlog.Title, Is.EqualTo(MockBlog.Title)); Assert.That(returnedBlog.Url, Is.EqualTo(MockBlog.Url)); }); + + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "GetBlog was called with id 1"); + _loggerMock.VerifyNoError(); } [Test] @@ -80,6 +85,8 @@ public async Task GetBlog_InvalidId_ReturnsNotFound() // Assert Assert.That(result.Result, Is.InstanceOf()); + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "GetBlog was called with id 1"); + _loggerMock.VerifyNoError(); } [Test] @@ -113,6 +120,9 @@ public async Task PostBlog_NoId_StoresBlog() Assert.That(returnedBlog.Title, Is.EqualTo(MockBlog.Title)); Assert.That(returnedBlog.Url, Is.EqualTo(MockBlog.Url)); }); + + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "PostBlog was called"); + _loggerMock.VerifyNoError(); } [Test] @@ -127,6 +137,8 @@ public async Task PostBlog_InvalidId_ReturnsNotFound() // Assert Assert.That(result.Result, Is.InstanceOf()); + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "PostBlog was called"); + _loggerMock.VerifyNoError(); } [Test] @@ -152,6 +164,8 @@ public async Task GetPosts_ReturnsListOfPosts() var returnedPosts = okResult.Value as IEnumerable; Assert.That(returnedPosts, Is.Not.Null); Assert.That(returnedPosts.Count(), Is.EqualTo(2)); + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "GetPosts was called with id 1"); + _loggerMock.VerifyNoError(); } [Test] @@ -175,6 +189,9 @@ public async Task GetPost_ValidId_ReturnsPost() Assert.That(returnedPost.BlogId, Is.EqualTo(MockPost.BlogId)); Assert.That(returnedPost.Content, Is.EqualTo(MockPost.Content)); }); + + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "GetPost was called with id 1"); + _loggerMock.VerifyNoError(); } [Test] @@ -189,6 +206,8 @@ public async Task GetPost_InvalidId_ReturnsNotFound() // Assert Assert.That(result.Result, Is.InstanceOf()); + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "GetPost was called with id 1"); + _loggerMock.VerifyNoError(); } [Test] @@ -223,6 +242,9 @@ public async Task PostPost_NoId_StoresPost() Assert.That(returnedPost.BlogId, Is.EqualTo(MockPost.BlogId)); Assert.That(returnedPost.Content, Is.EqualTo(MockPost.Content)); }); + + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "PostPost was called"); + _loggerMock.VerifyNoError(); } [Test] @@ -237,5 +259,7 @@ public async Task PostPost_InvalidId_ReturnsNotFound() // Assert Assert.That(result.Result, Is.InstanceOf()); + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "PostPost was called"); + _loggerMock.VerifyNoError(); } } \ No newline at end of file diff --git a/tests/backend/WebApi.Tests/Controllers/ServiceControllerTests.cs b/tests/backend/WebApi.Tests/Controllers/ServiceControllerTests.cs index 48a723b6..6c1b42c6 100644 --- a/tests/backend/WebApi.Tests/Controllers/ServiceControllerTests.cs +++ b/tests/backend/WebApi.Tests/Controllers/ServiceControllerTests.cs @@ -27,6 +27,8 @@ public async Task Version_ReturnsOkResult() // Assert Assert.That(result, Is.InstanceOf>()); Assert.That(result.Result, Is.InstanceOf()); + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "Version was called"); + _loggerMock.VerifyNoError(); } [Test] @@ -50,6 +52,9 @@ public async Task Version_ReturnsVersionWithCorrectProperties() Assert.That(version.EnvironmentName, Is.InstanceOf()); Assert.That(version.InformationalVersion, Is.InstanceOf()); }); + + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "Version was called"); + _loggerMock.VerifyNoError(); } [Test] @@ -65,21 +70,7 @@ public async Task Ping_ReturnsOkResult() Assert.That(okResult.Value, Is.Not.Null); Assert.That(okResult.Value, Is.AssignableFrom>()); Assert.That(okResult.Value is GenericValue {Value: "Ok"}); - } - - [Test] - public async Task Ping_LogsInformationMessage() - { - // Act - await _controller.Ping(); - - // Assert - _loggerMock.Verify(static logger => logger.Log( - It.Is(static logLevel => logLevel == LogLevel.Information), - It.Is(static eventId => eventId.Id == 0), - It.Is(static (@object, type) => @object.ToString() == "Ping was called" && type.Name == "FormattedLogValues"), - It.IsAny(), - It.IsAny>()), - Times.Once); + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "Ping was called"); + _loggerMock.VerifyNoError(); } } \ No newline at end of file diff --git a/tests/backend/WebApi.Tests/Controllers/WeatherForecastControllerTests.cs b/tests/backend/WebApi.Tests/Controllers/WeatherForecastControllerTests.cs index 15226abb..4a3a61ea 100644 --- a/tests/backend/WebApi.Tests/Controllers/WeatherForecastControllerTests.cs +++ b/tests/backend/WebApi.Tests/Controllers/WeatherForecastControllerTests.cs @@ -41,7 +41,7 @@ public async Task Get_ReturnsFiveWeatherForecasts() var okResult = (OkObjectResult) result.Result; Assert.That(okResult.Value, Is.Not.Null); Assert.That(okResult.Value, Is.AssignableFrom()); - Assert.That(((WeatherForecast[]) okResult.Value).Count(), Is.EqualTo(5)); + Assert.That(((WeatherForecast[]) okResult.Value).Length, Is.EqualTo(5)); } [Test] @@ -56,11 +56,19 @@ public async Task Get_ReturnsWeatherForecastsWithCorrectProperties() var okResult = (OkObjectResult) result.Result; Assert.That(okResult.Value, Is.Not.Null); Assert.That(okResult.Value, Is.AssignableFrom()); + var expectedValueRange = new[] + { + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; + foreach (var weatherForecast in (WeatherForecast[]) okResult.Value) { Assert.That(weatherForecast.Date, Is.InstanceOf()); Assert.That(weatherForecast.TemperatureC, Is.InstanceOf()); + Assert.That(weatherForecast.TemperatureC, Is.LessThan(56)); + Assert.That(weatherForecast.TemperatureC, Is.GreaterThan(-19)); Assert.That(weatherForecast.Summary, Is.InstanceOf()); + Assert.That(expectedValueRange, Contains.Item(weatherForecast.Summary)); } } @@ -71,12 +79,6 @@ public async Task Get_LogsInformationMessage() await _controller.Get(); // Assert - _loggerMock.Verify(static logger => logger.Log( - It.Is(static logLevel => logLevel == LogLevel.Information), - It.Is(static eventId => eventId.Id == 0), - It.Is(static (@object, type) => @object.ToString() == "GetWeatherForecast was called" && type.Name == "FormattedLogValues"), - It.IsAny(), - It.IsAny>()), - Times.Once); + _loggerMock.VerifyLog(LogLevel.Information, Times.Once(), "GetWeatherForecast was called"); } } \ No newline at end of file diff --git a/tests/backend/WebApi.Tests/MockHelper.cs b/tests/backend/WebApi.Tests/MockHelper.cs index 68983c91..fe61dc71 100644 --- a/tests/backend/WebApi.Tests/MockHelper.cs +++ b/tests/backend/WebApi.Tests/MockHelper.cs @@ -14,4 +14,6 @@ public static void VerifyLog(this Mock> loggerMock, LogLevel level It.IsAny(), It.IsAny>()), times); + + public static void VerifyNoError(this Mock> loggerMock) => loggerMock.VerifyLog(LogLevel.Error, Times.Never()); } \ No newline at end of file diff --git a/tests/backend/WebApi.Tests/packages.lock.json b/tests/backend/WebApi.Tests/packages.lock.json index 447b7f3d..56accce1 100644 --- a/tests/backend/WebApi.Tests/packages.lock.json +++ b/tests/backend/WebApi.Tests/packages.lock.json @@ -809,40 +809,40 @@ }, "Swashbuckle.AspNetCore": { "type": "Transitive", - "resolved": "6.7.3", - "contentHash": "PYTm/M5YrkEUHmguhj6vF1DshG2deKMMcsnhKet1BkcKzZHNX/VVQady0T/jNpXrtxhLR3vB10hWhONF1Nbglw==", + "resolved": "6.8.0", + "contentHash": "0Mk8/31efsxFNVeFzLjUVYDFTjYKtEi2UCSaI9+HIkSQ/duu++28gfq1+gwWDRLHkRMOkUgoWMLe0UoayAZySA==", "dependencies": { "Microsoft.Extensions.ApiDescription.Server": "6.0.5", - "Swashbuckle.AspNetCore.Swagger": "6.7.3", - "Swashbuckle.AspNetCore.SwaggerGen": "6.7.3", - "Swashbuckle.AspNetCore.SwaggerUI": "6.7.3" + "Swashbuckle.AspNetCore.Swagger": "6.8.0", + "Swashbuckle.AspNetCore.SwaggerGen": "6.8.0", + "Swashbuckle.AspNetCore.SwaggerUI": "6.8.0" } }, "Swashbuckle.AspNetCore.ReDoc": { "type": "Transitive", - "resolved": "6.7.3", - "contentHash": "TaefpygyLmCAT6AESpBy2yWnUisfSDhLxXhz1u9T0QVXb7wiPmuoRpUcox4Yy/djPMfXczyHsj4uq7iFxP9/vg==" + "resolved": "6.8.0", + "contentHash": "+1/onHsvCrQWi0ShlMth/Rn0QXVwBs32G52lacVe50V8TEGhs3Aml4byNJyb/VMG5Fx+S+camhsfL/VQMWAkiA==" }, "Swashbuckle.AspNetCore.Swagger": { "type": "Transitive", - "resolved": "6.7.3", - "contentHash": "plNVrOpup/UCIP0aSE5cznIzXMC17EOOqIceWqhP829evEAUwTomCc+1TPy2xK2E+OilYcYEdUus3rOUMjjm/g==", + "resolved": "6.8.0", + "contentHash": "f6Utk5eLFWRJbDFIqHGeb9Kb+w/9b+z0WIJUIAPY4hP263MPXI8ZbejdOktS10gvCLaQ3YCFl6fAVlCIUFKsRQ==", "dependencies": { "Microsoft.OpenApi": "1.6.14" } }, "Swashbuckle.AspNetCore.SwaggerGen": { "type": "Transitive", - "resolved": "6.7.3", - "contentHash": "kvjGd+g85YFZqyEQZSBUCPtEDDCZsiPPYcjgBN6si3C3oik2c9d7Zlq4PIm07pgY/QmBMgyFOVEzHbks6a398w==", + "resolved": "6.8.0", + "contentHash": "bmWglb1jeKD+tUE56wL2zE6lnlpJZbgDLXMlEOgl8xTqEs9g8C6eNNKGuMcnfxFt0CgZaBClaDqad2JDjZW5Fw==", "dependencies": { - "Swashbuckle.AspNetCore.Swagger": "6.7.3" + "Swashbuckle.AspNetCore.Swagger": "6.8.0" } }, "Swashbuckle.AspNetCore.SwaggerUI": { "type": "Transitive", - "resolved": "6.7.3", - "contentHash": "exXUT9h++OU70jTCfQALiHzeBthqL7c5IFQm+aa67Hi/6X945t32NtOMO16TaRn44xFXdqMZ2CyMbgnTmx+w2A==" + "resolved": "6.8.0", + "contentHash": "tG1FL+aFmmuqZ3eKVHgvSFvrzJoKbDzOmvK8YACucfbIBYfHQd45uQ18MhMF3xDaR46qdggdaHGqmfYo+nxwrw==" }, "System.Buffers": { "type": "Transitive", @@ -1057,8 +1057,8 @@ "OpenTelemetry.Instrumentation.Http": "[1.9.0, )", "OpenTelemetry.Instrumentation.Runtime": "[1.9.0, )", "RabbitMQ.Client": "[6.8.1, )", - "Swashbuckle.AspNetCore": "[6.7.3, )", - "Swashbuckle.AspNetCore.ReDoc": "[6.7.3, )" + "Swashbuckle.AspNetCore": "[6.8.0, )", + "Swashbuckle.AspNetCore.ReDoc": "[6.8.0, )" } } }, diff --git a/tests/playwright/package-lock.json b/tests/playwright/package-lock.json index 841d3df7..2ba8b1b5 100644 --- a/tests/playwright/package-lock.json +++ b/tests/playwright/package-lock.json @@ -12,7 +12,7 @@ "@cspell/eslint-plugin": "^8.9.1", "@eslint/js": "8.57.0", "@playwright/test": "^1.47.1", - "@types/node": "^20.14.7", + "@types/node": "^22.7.5", "@typescript-eslint/eslint-plugin": "^7.8.0", "@typescript-eslint/parser": "^7.2.0", "dotenv": "^16.4.5", @@ -26,7 +26,7 @@ "eslint-plugin-promise": "^6.1.1", "eslint-plugin-sonarjs": "^1.0.3", "eslint-ts-patch": "^8.57.0-0", - "globals": "^15.8.0", + "globals": "^15.11.0", "prettier": "^3.2.5", "typescript": "^5.4.5", "typescript-eslint": "^7.8.0" @@ -800,13 +800,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", - "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", "dev": true, - "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -2771,9 +2770,9 @@ } }, "node_modules/globals": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.8.0.tgz", - "integrity": "sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.11.0.tgz", + "integrity": "sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==", "dev": true, "engines": { "node": ">=18" @@ -4470,11 +4469,10 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true, - "license": "MIT" + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true }, "node_modules/uri-js": { "version": "4.4.1", diff --git a/tests/playwright/package.json b/tests/playwright/package.json index e45d7d1c..a70f0a96 100644 --- a/tests/playwright/package.json +++ b/tests/playwright/package.json @@ -20,7 +20,7 @@ "@cspell/eslint-plugin": "^8.9.1", "@eslint/js": "8.57.0", "@playwright/test": "^1.47.1", - "@types/node": "^20.14.7", + "@types/node": "^22.7.5", "@typescript-eslint/eslint-plugin": "^7.8.0", "@typescript-eslint/parser": "^7.2.0", "dotenv": "^16.4.5", @@ -34,7 +34,7 @@ "eslint-plugin-promise": "^6.1.1", "eslint-plugin-sonarjs": "^1.0.3", "eslint-ts-patch": "^8.57.0-0", - "globals": "^15.8.0", + "globals": "^15.11.0", "prettier": "^3.2.5", "typescript": "^5.4.5", "typescript-eslint": "^7.8.0"