From d15e7ec0b2b97bb08a471b9d944eedbaf62206ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Bitard?= <bitard.michael@gmail.com> Date: Tue, 10 May 2022 17:08:51 +0200 Subject: [PATCH] =?UTF-8?q?refactor(tests):=20lance=20les=20tests=20d'inte?= =?UTF-8?q?gration=20en=20parall=C3=A8le=20des=20tests=20unitaires=20(#55)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/api-ci.yml | 89 +++++----- .github/workflows/common.yml | 6 +- .github/workflows/ui-ci.yml | 6 +- .gitignore | 1 + Dockerfile.api | 12 +- package-lock.json | 117 +------------ packages/api/jest.config.integration.ts | 7 + packages/api/jest.config.ts | 158 +----------------- packages/api/package.json | 12 +- .../administration.test.integration.ts} | 4 +- ...permissions-demarches.test.integration.ts} | 4 +- ...ns-permissions-etapes.test.integration.ts} | 15 +- ...ns-permissions-titres.test.integration.ts} | 4 +- .../graphql/documents.test.integration.ts} | 18 +- .../graphql/entreprises.test.integration.ts} | 32 ++-- .../api/graphql/metas.test.integration.ts} | 4 +- .../resolvers/_titre-etape-email.test.ts | 10 +- .../graphql/resolvers/_titre-etape-email.ts | 11 +- .../titres-demarches.test.integration.ts} | 10 +- .../titres-etapes-creer.test.integration.ts} | 28 ++-- ...itres-etapes-modifier.test.integration.ts} | 24 +-- .../api/graphql/titres.test.integration.ts} | 16 +- .../api/graphql/token.test.integration.ts} | 20 ++- .../graphql/utilisateurs.test.integration.ts} | 17 +- ...s.snap => titres.test.integration.ts.snap} | 0 ...res.test.ts => titres.test.integration.ts} | 3 +- .../api/rest/upload.test.integration.ts} | 4 +- ...nistrations-gestionnaires-update-titres.ts | 8 +- ...s-administrations-locales-update-etapes.ts | 2 +- .../processes/entreprises-update.test.ts | 10 +- .../titres-activites-props-update.test.ts | 8 +- .../titres-activites-relance-send.test.ts | 6 +- ...titres-activites-statut-ids-update.test.ts | 4 +- .../processes/titres-activites-update.test.ts | 16 +- ...ministrations-gestionnaires-update.test.ts | 12 +- .../titres-contenus-etapes-ids-update.test.ts | 9 +- .../titres-coordonnees-update.test.ts | 5 +- .../processes/titres-dates-update.test.ts | 10 +- .../titres-demarches-depot-create.test.ts | 3 +- .../titres-demarches-ordre-update.test.ts | 4 +- .../titres-demarches-public-update.test.ts | 4 +- ...titres-demarches-statut-ids-update.test.ts | 4 +- ...pes-administrations-locales-update.test.ts | 10 +- .../titres-etapes-areas-update.test.ts | 10 +- .../titres-etapes-ordre-update.test.ts | 4 +- .../processes/titres-phases-update.test.ts | 3 +- .../titres-points-references-create.test.ts | 4 +- .../titres-props-etapes-ids-update.test.ts | 5 +- .../processes/titres-public-update.test.ts | 3 +- .../processes/titres-slugs-update.test.ts | 6 +- .../titres-statut-ids-update.test.ts | 3 +- .../business/rules-demarches/_utils.test.ts | 8 +- .../rules/titre-activites-build.test.ts | 3 +- ...-demarche-annulation-date-fin-find.test.ts | 3 + .../contenu-element-file-process.test.ts | 7 +- .../utils/titre-activite-valide-check.test.ts | 4 +- .../utils/titre-coordonnees-find.test.ts | 4 +- .../titre-etape-heritage-contenu-find.test.ts | 4 +- ...-and-relations-update.test.integration.ts} | 0 .../business/utils/titre-valide-check.test.ts | 6 +- ...tre-etape-type-and-status-validate.test.ts | 3 +- ...ts => administrations.test.integration.ts} | 5 +- .../queries/permissions/administrations.ts | 2 +- ....test.ts => documents.test.integration.ts} | 3 +- ...est.ts => entreprises.test.integration.ts} | 0 ...etas.test.ts => metas.test.integration.ts} | 13 +- ...s => titres-demarches.test.integration.ts} | 0 ...t.ts => titres-etapes.test.integration.ts} | 0 ...res.test.ts => titres.test.integration.ts} | 11 +- ...st.ts => utilisateurs.test.integration.ts} | 0 ...s => titres-activites.test.integration.ts} | 0 ...s => titres-demarches.test.integration.ts} | 4 +- ...res.test.ts => titres.test.integration.ts} | 0 packages/api/tests/_utils/index.ts | 4 +- packages/api/tests/db-manager.ts | 15 +- packages/api/tsconfig.json | 2 +- packages/common/.gitignore | 3 +- packages/common/package.json | 3 +- packages/ui/package.json | 11 +- 79 files changed, 347 insertions(+), 556 deletions(-) create mode 100644 packages/api/jest.config.integration.ts rename packages/api/{tests/administration.test.ts => src/api/graphql/administration.test.integration.ts} (98%) rename packages/api/{tests/administrations-permissions-demarches.test.ts => src/api/graphql/administrations-permissions-demarches.test.integration.ts} (98%) rename packages/api/{tests/administrations-permissions-etapes.test.ts => src/api/graphql/administrations-permissions-etapes.test.integration.ts} (94%) rename packages/api/{tests/administrations-permissions-titres.test.ts => src/api/graphql/administrations-permissions-titres.test.integration.ts} (98%) rename packages/api/{tests/documents.test.ts => src/api/graphql/documents.test.integration.ts} (87%) rename packages/api/{tests/entreprises.test.ts => src/api/graphql/entreprises.test.integration.ts} (90%) rename packages/api/{tests/metas.test.ts => src/api/graphql/metas.test.integration.ts} (93%) rename packages/api/{tests/titres-demarches.test.ts => src/api/graphql/titres-demarches.test.integration.ts} (96%) rename packages/api/{tests/titres-etapes-creer.test.ts => src/api/graphql/titres-etapes-creer.test.integration.ts} (91%) rename packages/api/{tests/titres-etapes-modifier.test.ts => src/api/graphql/titres-etapes-modifier.test.integration.ts} (90%) rename packages/api/{tests/titres.test.ts => src/api/graphql/titres.test.integration.ts} (96%) rename packages/api/{tests/token.test.ts => src/api/graphql/token.test.integration.ts} (80%) rename packages/api/{tests/utilisateurs.test.ts => src/api/graphql/utilisateurs.test.integration.ts} (96%) rename packages/api/src/api/rest/__snapshots__/{titres.test.ts.snap => titres.test.integration.ts.snap} (100%) rename packages/api/src/api/rest/{titres.test.ts => titres.test.integration.ts} (98%) rename packages/api/{tests/upload.test.ts => src/api/rest/upload.test.integration.ts} (87%) rename packages/api/src/business/utils/{titre-slug-and-relations-update.test.ts => titre-slug-and-relations-update.test.integration.ts} (100%) rename packages/api/src/database/queries/permissions/{administrations.test.ts => administrations.test.integration.ts} (98%) rename packages/api/src/database/queries/permissions/{documents.test.ts => documents.test.integration.ts} (99%) rename packages/api/src/database/queries/permissions/{entreprises.test.ts => entreprises.test.integration.ts} (100%) rename packages/api/src/database/queries/permissions/{metas.test.ts => metas.test.integration.ts} (91%) rename packages/api/src/database/queries/permissions/{titres-demarches.test.ts => titres-demarches.test.integration.ts} (100%) rename packages/api/src/database/queries/permissions/{titres-etapes.test.ts => titres-etapes.test.integration.ts} (100%) rename packages/api/src/database/queries/permissions/{titres.test.ts => titres.test.integration.ts} (98%) rename packages/api/src/database/queries/permissions/{utilisateurs.test.ts => utilisateurs.test.integration.ts} (100%) rename packages/api/src/database/queries/{titres-activites.test.ts => titres-activites.test.integration.ts} (100%) rename packages/api/src/database/queries/{titres-demarches.test.ts => titres-demarches.test.integration.ts} (93%) rename packages/api/src/database/queries/{titres.test.ts => titres.test.integration.ts} (100%) diff --git a/.github/workflows/api-ci.yml b/.github/workflows/api-ci.yml index 55b124332..59fd80a79 100644 --- a/.github/workflows/api-ci.yml +++ b/.github/workflows/api-ci.yml @@ -5,25 +5,8 @@ concurrency: group: api-ci-${{ github.ref }} cancel-in-progress: true jobs: - test: + unit-test: runs-on: ubuntu-latest - services: - postgres: - image: postgis/postgis:12-3.2 - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: password - POSTGRES_DB: camino_tests - PGUSER: postgres - PGPASSWORD: password - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - # Maps tcp port 5432 on service container to the host - - 5432:5432 steps: - name: Checkout uses: actions/checkout@v3 @@ -36,31 +19,61 @@ jobs: run: | npm set-script prepare "" npm ci - npm run ci:lint --workspace=packages/api env: CI: true - name: Unit tests run: npm run ci:test-unit --workspace=packages/api - env: - PGHOST: localhost - PGPORT: 5432 - PGUSER: postgres - PGPASSWORD: password - - name: Code coverage - run: npm run codecov --workspace=packages/api - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - - name: Integration tests - #Installation d’une version de knex-db-manager qui seed la bdd séquentiellement - run: npm run ci:test-integration --workspace=packages/api - env: - PGHOST: localhost - PGPORT: 5432 - PGUSER: postgres - PGPASSWORD: password + - uses: codecov/codecov-action@v2 + with: + token: ${{ secrets.CODECOV_TOKEN }} + flags: api-unit, api + integration-test: + runs-on: ubuntu-latest + services: + postgres: + image: postgis/postgis:12-3.2 + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: password + POSTGRES_DB: camino_tests + PGUSER: postgres + PGPASSWORD: password + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + # Maps tcp port 5432 on service container to the host + - 5432:5432 + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: '17.8' + cache: 'npm' + - name: Npm install + run: | + npm set-script prepare "" + npm ci + env: + CI: true + - name: Integration tests + run: npm run ci:test-integration --workspace=packages/api + env: + PGHOST: localhost + PGPORT: 5432 + PGUSER: postgres + PGPASSWORD: password + - uses: codecov/codecov-action@v2 + with: + token: ${{ secrets.CODECOV_TOKEN }} + flags: api-integration, api build: - needs: test + needs: [unit-test, integration-test] runs-on: ubuntu-latest steps: @@ -78,7 +91,7 @@ jobs: run: docker push caminofr/camino-api:${GITHUB_SHA} doc: - needs: test + needs: [unit-test, integration-test] runs-on: ubuntu-latest steps: - name: Checkout diff --git a/.github/workflows/common.yml b/.github/workflows/common.yml index d701abddf..3864b5b5d 100644 --- a/.github/workflows/common.yml +++ b/.github/workflows/common.yml @@ -23,4 +23,8 @@ jobs: env: CI: true - name: Unit tests - run: npm run test --workspace=packages/common + run: npm run ci:test --workspace=packages/common + - uses: codecov/codecov-action@v2 + with: + token: ${{ secrets.CODECOV_TOKEN }} + flags: common diff --git a/.github/workflows/ui-ci.yml b/.github/workflows/ui-ci.yml index 1228b0ecf..46a9a4e7e 100644 --- a/.github/workflows/ui-ci.yml +++ b/.github/workflows/ui-ci.yml @@ -21,10 +21,12 @@ jobs: npm ci npm run lint:check --workspace=packages/ui npm test --workspace=packages/ui - npm run codecov --workspace=packages/ui env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} CI: true + - uses: codecov/codecov-action@v2 + with: + token: ${{ secrets.CODECOV_TOKEN }} + flags: ui build: needs: test diff --git a/.gitignore b/.gitignore index 326b754e0..371003c29 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules .idea .eslintcache .env +/.cache diff --git a/Dockerfile.api b/Dockerfile.api index bb1a78e26..cf41ec3df 100644 --- a/Dockerfile.api +++ b/Dockerfile.api @@ -6,11 +6,17 @@ COPY packages/common/package.json /app/packages/common/package.json COPY packages/api/package.json /app/packages/api/package.json # On désactive husky -RUN npm set-script prepare "" -RUN npm ci --only=prod +RUN npm set-script prepare "" && \ + npm ci COPY ./ /app/ -RUN npm run build -w packages/api +RUN npm run build -w packages/api && \ + rm -rf /app/node_modules/ && \ + rm -rf /app/packages/api/node_modules/ && \ + rm -rf /app/packages/ui/node_modules/ && \ + rm -rf /app/packages/common/node_modules/ && \ + npm set-script prepare "" && \ + npm ci --only=prod FROM node:17.8-alpine as production-stage diff --git a/package-lock.json b/package-lock.json index e9e426308..dfc808eee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12449,13 +12449,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/argv": { - "version": "0.0.2", - "dev": true, - "engines": { - "node": ">=0.6.10" - } - }, "node_modules/argv-formatter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", @@ -14643,25 +14636,6 @@ "node": ">= 0.12.0" } }, - "node_modules/codecov": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.8.3.tgz", - "integrity": "sha512-Y8Hw+V3HgR7V71xWH2vQ9lyS358CbGCldWlJFR0JirqoGtOoas3R3/OclRTvgUYFK29mmJICDPauVKmpqbwhOA==", - "dev": true, - "dependencies": { - "argv": "0.0.2", - "ignore-walk": "3.0.4", - "js-yaml": "3.14.1", - "teeny-request": "7.1.1", - "urlgrey": "1.0.0" - }, - "bin": { - "codecov": "bin/codecov" - }, - "engines": { - "node": ">=4.0" - } - }, "node_modules/codepage": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", @@ -20087,21 +20061,6 @@ "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", - "dev": true, - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fast-url-parser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, "node_modules/fast-xml-parser": { "version": "3.19.0", "license": "MIT", @@ -22597,15 +22556,6 @@ "dev": true, "license": "ISC" }, - "node_modules/ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -40066,15 +40016,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, - "node_modules/urlgrey": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-1.0.0.tgz", - "integrity": "sha512-hJfIzMPJmI9IlLkby8QrsCykQ+SXDeO2W5Q9QTW3QpqZVTx4a/K7p8/5q+/isD8vsbVaFgql/gvAoQCRQ2Cb5w==", - "dev": true, - "dependencies": { - "fast-url-parser": "^1.1.3" - } - }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -41868,7 +41809,6 @@ "@types/supertest": "^2.0.11", "@typescript-eslint/eslint-plugin": "^5.15.0", "@typescript-eslint/parser": "^5.15.0", - "codecov": "^3.8.3", "commitizen": "^4.2.4", "cz-conventional-changelog": "^3.3.0", "eslint": "^8.11.0", @@ -41949,7 +41889,6 @@ "babel-preset-vite": "^1.0.4", "chalk": "^5.0.1", "chart.js": "^3.7.1", - "codecov": "^3.8.3", "commitizen": "^4.2.4", "core-js": "^3.21.1", "cross-env": "^7.0.3", @@ -52009,10 +51948,6 @@ "sprintf-js": "~1.0.2" } }, - "argv": { - "version": "0.0.2", - "dev": true - }, "argv-formatter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", @@ -53211,7 +53146,6 @@ "camelcase": "^6.3.0", "cerbere": "^0.2.3", "chalk": "^4.1.2", - "codecov": "^3.8.3", "commitizen": "^4.2.4", "compression": "^1.7.4", "cookie-parser": "^1.4.6", @@ -53236,7 +53170,7 @@ "express": "^4.17.3", "express-graphql": "^0.12.0", "express-jwt": "^6.1.1", - "express-rate-limit": "*", + "express-rate-limit": "^6.4.0", "geojson-rewind": "^0.3.1", "graphql": "^16.3.0", "graphql-fields": "^2.0.3", @@ -53322,7 +53256,6 @@ "babel-preset-vite": "^1.0.4", "chalk": "^5.0.1", "chart.js": "^3.7.1", - "codecov": "^3.8.3", "commitizen": "^4.2.4", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", @@ -54042,19 +53975,6 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, - "codecov": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.8.3.tgz", - "integrity": "sha512-Y8Hw+V3HgR7V71xWH2vQ9lyS358CbGCldWlJFR0JirqoGtOoas3R3/OclRTvgUYFK29mmJICDPauVKmpqbwhOA==", - "dev": true, - "requires": { - "argv": "0.0.2", - "ignore-walk": "3.0.4", - "js-yaml": "3.14.1", - "teeny-request": "7.1.1", - "urlgrey": "1.0.0" - } - }, "codepage": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", @@ -57927,23 +57847,6 @@ "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", - "dev": true, - "requires": { - "punycode": "^1.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, "fast-xml-parser": { "version": "3.19.0" }, @@ -59733,15 +59636,6 @@ "version": "1.0.1", "dev": true }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -72641,15 +72535,6 @@ "prepend-http": "^2.0.0" } }, - "urlgrey": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-1.0.0.tgz", - "integrity": "sha512-hJfIzMPJmI9IlLkby8QrsCykQ+SXDeO2W5Q9QTW3QpqZVTx4a/K7p8/5q+/isD8vsbVaFgql/gvAoQCRQ2Cb5w==", - "dev": true, - "requires": { - "fast-url-parser": "^1.1.3" - } - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", diff --git a/packages/api/jest.config.integration.ts b/packages/api/jest.config.integration.ts new file mode 100644 index 000000000..642a9c879 --- /dev/null +++ b/packages/api/jest.config.integration.ts @@ -0,0 +1,7 @@ +import config from './jest.config' +config.testRegex = 'test.integration.ts$' +config.maxWorkers = 1 +config.testTimeout = 20000 + +console.log('RUNNING INTEGRATION TESTS') +export default config diff --git a/packages/api/jest.config.ts b/packages/api/jest.config.ts index 9671089da..8975d5452 100644 --- a/packages/api/jest.config.ts +++ b/packages/api/jest.config.ts @@ -3,178 +3,32 @@ import type { Config } from '@jest/types' const config: Config.InitialOptions = { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after the first failure - // bail: false, - - // Respect "browser" field in package.json when resolving modules - // browser: false, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "/var/folders/k1/qn_ccxjn65lgnjx5d1xh31dm0000gn/T/jest_dx", - - // Automatically clear mock calls and instances between every test clearMocks: true, - - // Indicates whether the coverage information should be collected while executing the test - collectCoverage: true, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - // collectCoverageFrom: null, - - // The directory where Jest should output its coverage files + collectCoverage: false, coverageDirectory: './coverage', - - // An array of regexp pattern strings used to skip coverage collection - coveragePathIgnorePatterns: ['tests'], - - // A list of reporter names that Jest uses when writing coverage reports - // coverageReporters: [ - // "json", - // "text", - // "lcov", - // "clover" - // ], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: null, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // Force coverage collection from ignored files usin a array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites globalSetup: './tests/setup.ts', - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: './tests/teardown.ts', - - // A set of global variables that need to be available in all test environments globals: { 'ts-jest': { isolatedModules: true, diagnostics: false } }, - // extensionsToTreatAsEsm: ['.ts'], - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - // An array of file extensions your modules use - // moduleFileExtensions: ['ts', 'tsx', 'js', 'json', 'jsx', 'node'], - - // A map from regular expressions to module names that allow to stub out resources with a single module - // moduleNameMapper: {}, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "always", - - // A preset that is used as a base for Jest's configuration preset: 'ts-jest', - - // Run tests from one or more projects - // projects: null, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state between every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: null, - - // Automatically restore mock state between every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within rootDir: './', - // A list of paths to directories that Jest should use to search for files in - roots: ['<rootDir>/src', '<rootDir>/tests'], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", + roots: ['<rootDir>/src'], - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // The path to a module that runs some code to configure or set up the testing framework before each test setupFilesAfterEnv: ['./tests/jest-setup.ts'], - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing testEnvironment: 'node', - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: [ - // "**/__tests__/**/*.js?(x)", - // "**/?(*.)+(spec|test).js?(x)" - // ], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // '/node_modules/' - // ] - - // The regexp pattern Jest uses to detect test files - // testRegex: "", - - // This option allows the use of a custom results processor - // testResultsProcessor: null, - - // This option allows use of a custom test runner - // testRunner: "jasmine2", - - // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href - // testURL: "http://localhost", - - // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" - // timers: "real", - - // A map from regular expressions to paths to transformers + testRegex: '.*test\\.ts$', transform: { '^.+\\.ts?$': 'ts-jest' }, - maxWorkers: 1, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation transformIgnorePatterns: ['/node_modules/'], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - verbose: true - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, + verbose: true, + detectOpenHandles: true, + forceExit: true } export default config diff --git a/packages/api/package.json b/packages/api/package.json index dcf329231..2d959f6a1 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -31,13 +31,12 @@ "documents:check": "node ./dist/src/scripts/documents-check.js", "lint": "prettier --write . && eslint --fix .", "start": "node ./dist/src/index.js", - "test": "cross-env JWT_SECRET=secret-tests JWT_SECRET_REFRESH=refresh-secret jest --testPathIgnorePatterns=tests --runInBand --detectOpenHandles --forceExit", - "test:unit": "cross-env jest JWT_SECRET=secret-tests JWT_SECRET_REFRESH=refresh-secret --testPathIgnorePatterns=tests --runInBand --detectOpenHandles --watch", - "test:integration": "cross-env JWT_SECRET=secret-tests JWT_SECRET_REFRESH=refresh-secret jest --testPathIgnorePatterns=src --runInBand --detectOpenHandles --watch --testTimeout=20000", + "test": "npm run test:unit && npm run test:integration", + "test:unit": "jest -c jest.config.ts", + "test:integration": "JWT_SECRET=secret-tests JWT_SECRET_REFRESH=refresh-secret jest -c jest.config.integration.ts --runInBand", "ci:lint": "prettier --check . && eslint .", - "ci:test-unit": "cross-env JWT_SECRET=secret-tests JWT_SECRET_REFRESH=refresh-secret jest --testPathIgnorePatterns=tests --ci --runInBand --detectOpenHandles --forceExit --testTimeout=20000", - "ci:test-integration": "cross-env JWT_SECRET=secret-tests JWT_SECRET_REFRESH=refresh-secret jest --testPathIgnorePatterns=src --runInBand --detectOpenHandles --ci --forceExit --testTimeout=20000", - "codecov": "codecov" + "ci:test-unit": "jest -c jest.config.ts --ci --collect-coverage", + "ci:test-integration": "JWT_SECRET=secret-tests JWT_SECRET_REFRESH=refresh-secret jest -c jest.config.integration.ts --runInBand --ci --collect-coverage" }, "@comment dependencies": { "modules esm": "crypto-random-string, p-queue, @sindresorhus/slugify, email-regex, decamelize, dateformat, node-fetch à ne pas updater tant que on ne compile pas pour es2020: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c. Pas simple de migrer ts-node.", @@ -124,7 +123,6 @@ "@types/supertest": "^2.0.11", "@typescript-eslint/eslint-plugin": "^5.15.0", "@typescript-eslint/parser": "^5.15.0", - "codecov": "^3.8.3", "commitizen": "^4.2.4", "cz-conventional-changelog": "^3.3.0", "eslint": "^8.11.0", diff --git a/packages/api/tests/administration.test.ts b/packages/api/src/api/graphql/administration.test.integration.ts similarity index 98% rename from packages/api/tests/administration.test.ts rename to packages/api/src/api/graphql/administration.test.integration.ts index e60c5a513..688cb6841 100644 --- a/packages/api/tests/administration.test.ts +++ b/packages/api/src/api/graphql/administration.test.integration.ts @@ -1,6 +1,6 @@ -import { graphQLCall, queryImport } from './_utils/index' +import { graphQLCall, queryImport } from '../../../tests/_utils/index' -import { dbManager } from './db-manager' +import { dbManager } from '../../../tests/db-manager' import { ADMINISTRATION_IDS } from 'camino-common/src/administrations' console.info = jest.fn() diff --git a/packages/api/tests/administrations-permissions-demarches.test.ts b/packages/api/src/api/graphql/administrations-permissions-demarches.test.integration.ts similarity index 98% rename from packages/api/tests/administrations-permissions-demarches.test.ts rename to packages/api/src/api/graphql/administrations-permissions-demarches.test.integration.ts index 18676909c..2b37a7eda 100644 --- a/packages/api/tests/administrations-permissions-demarches.test.ts +++ b/packages/api/src/api/graphql/administrations-permissions-demarches.test.integration.ts @@ -1,9 +1,9 @@ -import { dbManager } from './db-manager' +import { dbManager } from '../../../tests/db-manager' import { visibleCheck, creationCheck, modificationCheck -} from './_utils/administrations-permissions' +} from '../../../tests/_utils/administrations-permissions' console.info = jest.fn() console.error = jest.fn() diff --git a/packages/api/tests/administrations-permissions-etapes.test.ts b/packages/api/src/api/graphql/administrations-permissions-etapes.test.integration.ts similarity index 94% rename from packages/api/tests/administrations-permissions-etapes.test.ts rename to packages/api/src/api/graphql/administrations-permissions-etapes.test.integration.ts index 782ec9d92..bce6512bb 100644 --- a/packages/api/tests/administrations-permissions-etapes.test.ts +++ b/packages/api/src/api/graphql/administrations-permissions-etapes.test.integration.ts @@ -1,21 +1,22 @@ -import { dbManager } from './db-manager' +import { dbManager } from '../../../tests/db-manager' import { creationCheck, modificationCheck, visibleCheck -} from './_utils/administrations-permissions' -import TitresTypesDemarchesTypesEtapesTypesJustificatifsTypes from '../src/database/models/titres-types--demarches-types-etapes-types-justificatifs-types' -import TitresTypesDemarchesTypesEtapesTypesDocumentsTypes from '../src/database/models/titres-types--demarches-types-etapes-types-documents-types' +} from '../../../tests/_utils/administrations-permissions' +import TitresTypesDemarchesTypesEtapesTypesJustificatifsTypes from '../../database/models/titres-types--demarches-types-etapes-types-justificatifs-types' +import TitresTypesDemarchesTypesEtapesTypesDocumentsTypes from '../../database/models/titres-types--demarches-types-etapes-types-documents-types' -jest.mock('../src/tools/dir-create', () => ({ +jest.mock('../../tools/dir-create', () => ({ __esModule: true, default: jest.fn() })) -jest.mock('../src/tools/file-stream-create', () => ({ + +jest.mock('../../tools/file-stream-create', () => ({ __esModule: true, default: jest.fn() })) -jest.mock('../src/tools/file-delete', () => ({ +jest.mock('../../tools/file-delete', () => ({ __esModule: true, default: jest.fn() })) diff --git a/packages/api/tests/administrations-permissions-titres.test.ts b/packages/api/src/api/graphql/administrations-permissions-titres.test.integration.ts similarity index 98% rename from packages/api/tests/administrations-permissions-titres.test.ts rename to packages/api/src/api/graphql/administrations-permissions-titres.test.integration.ts index d66c626a6..26501f388 100644 --- a/packages/api/tests/administrations-permissions-titres.test.ts +++ b/packages/api/src/api/graphql/administrations-permissions-titres.test.integration.ts @@ -1,9 +1,9 @@ -import { dbManager } from './db-manager' +import { dbManager } from '../../../tests/db-manager' import { visibleCheck, creationCheck, modificationCheck -} from './_utils/administrations-permissions' +} from '../../../tests/_utils/administrations-permissions' console.info = jest.fn() console.error = jest.fn() diff --git a/packages/api/tests/documents.test.ts b/packages/api/src/api/graphql/documents.test.integration.ts similarity index 87% rename from packages/api/tests/documents.test.ts rename to packages/api/src/api/graphql/documents.test.integration.ts index 9899fddb6..c207116d7 100644 --- a/packages/api/tests/documents.test.ts +++ b/packages/api/src/api/graphql/documents.test.integration.ts @@ -1,15 +1,15 @@ -import { graphQLCall, queryImport } from './_utils/index' -import { ITitreEtapeJustificatif } from '../src/types' -import { documentCreate, documentGet } from '../src/database/queries/documents' -import { entrepriseUpsert } from '../src/database/queries/entreprises' -import { titreCreate } from '../src/database/queries/titres' +import { graphQLCall, queryImport } from '../../../tests/_utils/index' +import { ITitreEtapeJustificatif } from '../../types' +import { documentCreate, documentGet } from '../../database/queries/documents' +import { entrepriseUpsert } from '../../database/queries/entreprises' +import { titreCreate } from '../../database/queries/titres' import { titreEtapeCreate, titresEtapesJustificatifsUpsert -} from '../src/database/queries/titres-etapes' -import { userSuper } from '../src/database/user-super' -import { dbManager } from './db-manager' -import { titreDemarcheCreate } from '../src/database/queries/titres-demarches' +} from '../../database/queries/titres-etapes' +import { userSuper } from '../../database/user-super' +import { dbManager } from '../../../tests/db-manager' +import { titreDemarcheCreate } from '../../database/queries/titres-demarches' console.info = jest.fn() console.error = jest.fn() diff --git a/packages/api/tests/entreprises.test.ts b/packages/api/src/api/graphql/entreprises.test.integration.ts similarity index 90% rename from packages/api/tests/entreprises.test.ts rename to packages/api/src/api/graphql/entreprises.test.integration.ts index 8701e30a7..b7f00427c 100644 --- a/packages/api/tests/entreprises.test.ts +++ b/packages/api/src/api/graphql/entreprises.test.integration.ts @@ -1,40 +1,38 @@ -import { mocked } from 'jest-mock' - -import { ITitreEtapeJustificatif } from '../src/types' -import { dbManager } from './db-manager' -import { graphQLCall, queryImport } from './_utils/index' +import { ITitreEtapeJustificatif } from '../../types' +import { dbManager } from '../../../tests/db-manager' +import { graphQLCall, queryImport } from '../../../tests/_utils/index' import { entreprisesEtablissementsFetch, entreprisesFetch, tokenInitialize -} from '../src/tools/api-insee/fetch' +} from '../../tools/api-insee/fetch' import { entreprise, entrepriseAndEtablissements -} from './__mocks__/fetch-insee-api' -import { entrepriseUpsert } from '../src/database/queries/entreprises' -import { titreCreate } from '../src/database/queries/titres' -import { documentCreate } from '../src/database/queries/documents' +} from '../../../tests/__mocks__/fetch-insee-api' +import { entrepriseUpsert } from '../../database/queries/entreprises' +import { titreCreate } from '../../database/queries/titres' +import { documentCreate } from '../../database/queries/documents' import { titreEtapeCreate, titresEtapesJustificatifsUpsert -} from '../src/database/queries/titres-etapes' -import { titreDemarcheCreate } from '../src/database/queries/titres-demarches' -import { userSuper } from '../src/database/user-super' +} from '../../database/queries/titres-etapes' +import { titreDemarcheCreate } from '../../database/queries/titres-demarches' +import { userSuper } from '../../database/user-super' console.info = jest.fn() console.error = jest.fn() -jest.mock('../src/tools/api-insee/fetch', () => ({ +jest.mock('../../tools/api-insee/fetch', () => ({ __esModule: true, tokenInitialize: jest.fn(), entreprisesFetch: jest.fn(), entreprisesEtablissementsFetch: jest.fn() })) -const tokenInitializeMock = mocked(tokenInitialize, true) -const entrepriseFetchMock = mocked(entreprisesFetch, true) -const entreprisesEtablissementsFetchMock = mocked( +const tokenInitializeMock = jest.mocked(tokenInitialize, true) +const entrepriseFetchMock = jest.mocked(entreprisesFetch, true) +const entreprisesEtablissementsFetchMock = jest.mocked( entreprisesEtablissementsFetch, true ) diff --git a/packages/api/tests/metas.test.ts b/packages/api/src/api/graphql/metas.test.integration.ts similarity index 93% rename from packages/api/tests/metas.test.ts rename to packages/api/src/api/graphql/metas.test.integration.ts index a8ae23ddc..929b57306 100644 --- a/packages/api/tests/metas.test.ts +++ b/packages/api/src/api/graphql/metas.test.integration.ts @@ -1,5 +1,5 @@ -import { dbManager } from './db-manager' -import { graphQLCall, queryImport } from './_utils/index' +import { dbManager } from '../../../tests/db-manager' +import { graphQLCall, queryImport } from '../../../tests/_utils/index' console.info = jest.fn() console.error = jest.fn() diff --git a/packages/api/src/api/graphql/resolvers/_titre-etape-email.test.ts b/packages/api/src/api/graphql/resolvers/_titre-etape-email.test.ts index f7fe396e6..be8b91d98 100644 --- a/packages/api/src/api/graphql/resolvers/_titre-etape-email.test.ts +++ b/packages/api/src/api/graphql/resolvers/_titre-etape-email.test.ts @@ -1,5 +1,6 @@ import { emailsForAdministrationsGet } from './_titre-etape-email' import { ITitreEtape, IUtilisateur } from '../../../types' +import { userSuper } from '../../../database/user-super' test('envoie un email sur une étape non existante', () => { const actual = emailsForAdministrationsGet( @@ -8,7 +9,7 @@ test('envoie un email sur une étape non existante', () => { '', '', '', - undefined, + userSuper, undefined ) @@ -48,7 +49,12 @@ const etape: ITitreEtape = { publicLecture: true, entreprisesLecture: true }, - statut: { id: 'fai', nom: 'fait', description: null, couleur: 'success' }, + statut: { + id: 'fai', + nom: 'fait', + description: undefined, + couleur: 'success' + }, justificatifs: [], substances: [], documents: [], diff --git a/packages/api/src/api/graphql/resolvers/_titre-etape-email.ts b/packages/api/src/api/graphql/resolvers/_titre-etape-email.ts index a99d6a71d..0eec48427 100644 --- a/packages/api/src/api/graphql/resolvers/_titre-etape-email.ts +++ b/packages/api/src/api/graphql/resolvers/_titre-etape-email.ts @@ -39,14 +39,17 @@ const etapeStatusUpdated = ( // VisibleForTesting export const emailsForAdministrationsGet = ( - etape: ITitreEtape, - etapeType: IEtapeType, + etape: ITitreEtape | undefined, + etapeType: IEtapeType | undefined, demarcheTypeId: string, titreId: string, titreTypeId: string, user: IUtilisateur, oldEtape?: ITitreEtape ): { subject: string; content: string; emails: string[] } | null => { + if (!etape) { + return null + } const emails = [] as string[] let title = '' @@ -86,10 +89,10 @@ export const emailsForAdministrationsGet = ( return null } - const subject = `${etapeType.nom} | ${title}` + const subject = `${etapeType?.nom} | ${title}` const content = emailForAdministrationContentFormat( titreTypeId, - etapeType.nom, + etapeType?.nom ?? '', titreId, user ) diff --git a/packages/api/tests/titres-demarches.test.ts b/packages/api/src/api/graphql/titres-demarches.test.integration.ts similarity index 96% rename from packages/api/tests/titres-demarches.test.ts rename to packages/api/src/api/graphql/titres-demarches.test.integration.ts index 376fe1a6c..701368d18 100644 --- a/packages/api/tests/titres-demarches.test.ts +++ b/packages/api/src/api/graphql/titres-demarches.test.integration.ts @@ -1,8 +1,8 @@ -import { dbManager } from './db-manager' -import { graphQLCall, queryImport } from './_utils/index' -import { titreCreate } from '../src/database/queries/titres' -import { titreEtapeUpsert } from '../src/database/queries/titres-etapes' -import { userSuper } from '../src/database/user-super' +import { dbManager } from '../../../tests/db-manager' +import { graphQLCall, queryImport } from '../../../tests/_utils/index' +import { titreCreate } from '../../database/queries/titres' +import { titreEtapeUpsert } from '../../database/queries/titres-etapes' +import { userSuper } from '../../database/user-super' import { ADMINISTRATION_IDS, Administrations diff --git a/packages/api/tests/titres-etapes-creer.test.ts b/packages/api/src/api/graphql/titres-etapes-creer.test.integration.ts similarity index 91% rename from packages/api/tests/titres-etapes-creer.test.ts rename to packages/api/src/api/graphql/titres-etapes-creer.test.integration.ts index 21b029e61..4ae89ce79 100644 --- a/packages/api/tests/titres-etapes-creer.test.ts +++ b/packages/api/src/api/graphql/titres-etapes-creer.test.integration.ts @@ -1,28 +1,28 @@ -import { dbManager } from './db-manager' -import { graphQLCall, queryImport } from './_utils/index' -import { titreDemarcheCreate } from '../src/database/queries/titres-demarches' -import { titreCreate } from '../src/database/queries/titres' -import { IPermissionId } from '../src/types' -import { titreEtapePropsIds } from '../src/business/utils/titre-etape-heritage-props-find' -import Titres from '../src/database/models/titres' -import TitresTypesDemarchesTypesEtapesTypes from '../src/database/models/titres-types--demarches-types-etapes-types' -import TitresTypesDemarchesTypesEtapesTypesJustificatifsTypes from '../src/database/models/titres-types--demarches-types-etapes-types-justificatifs-types' -import TitresTypesDemarchesTypesEtapesTypesDocumentsTypes from '../src/database/models/titres-types--demarches-types-etapes-types-documents-types' -import { documentCreate } from '../src/database/queries/documents' +import { dbManager } from '../../../tests/db-manager' +import { graphQLCall, queryImport } from '../../../tests/_utils/index' +import { titreDemarcheCreate } from '../../database/queries/titres-demarches' +import { titreCreate } from '../../database/queries/titres' +import { IPermissionId } from '../../types' +import { titreEtapePropsIds } from '../../business/utils/titre-etape-heritage-props-find' +import Titres from '../../database/models/titres' +import TitresTypesDemarchesTypesEtapesTypes from '../../database/models/titres-types--demarches-types-etapes-types' +import TitresTypesDemarchesTypesEtapesTypesJustificatifsTypes from '../../database/models/titres-types--demarches-types-etapes-types-justificatifs-types' +import TitresTypesDemarchesTypesEtapesTypesDocumentsTypes from '../../database/models/titres-types--demarches-types-etapes-types-documents-types' +import { documentCreate } from '../../database/queries/documents' import { ADMINISTRATION_IDS, Administrations } from 'camino-common/src/administrations' -jest.mock('../src/tools/dir-create', () => ({ +jest.mock('../../tools/dir-create', () => ({ __esModule: true, default: jest.fn() })) -jest.mock('../src/tools/file-stream-create', () => ({ +jest.mock('../../tools/file-stream-create', () => ({ __esModule: true, default: jest.fn() })) -jest.mock('../src/tools/file-delete', () => ({ +jest.mock('../../tools/file-delete', () => ({ __esModule: true, default: jest.fn() })) diff --git a/packages/api/tests/titres-etapes-modifier.test.ts b/packages/api/src/api/graphql/titres-etapes-modifier.test.integration.ts similarity index 90% rename from packages/api/tests/titres-etapes-modifier.test.ts rename to packages/api/src/api/graphql/titres-etapes-modifier.test.integration.ts index 3851d07da..48addfe92 100644 --- a/packages/api/tests/titres-etapes-modifier.test.ts +++ b/packages/api/src/api/graphql/titres-etapes-modifier.test.integration.ts @@ -1,28 +1,28 @@ -import { IPermissionId } from '../src/types' -import { dbManager } from './db-manager' -import { graphQLCall, queryImport } from './_utils/index' -import { titreDemarcheCreate } from '../src/database/queries/titres-demarches' -import { titreCreate } from '../src/database/queries/titres' -import { titreEtapeCreate } from '../src/database/queries/titres-etapes' -import { titreEtapePropsIds } from '../src/business/utils/titre-etape-heritage-props-find' -import Titres from '../src/database/models/titres' -import { userSuper } from '../src/database/user-super' +import { IPermissionId } from '../../types' +import { dbManager } from '../../../tests/db-manager' +import { graphQLCall, queryImport } from '../../../tests/_utils/index' +import { titreDemarcheCreate } from '../../database/queries/titres-demarches' +import { titreCreate } from '../../database/queries/titres' +import { titreEtapeCreate } from '../../database/queries/titres-etapes' +import { titreEtapePropsIds } from '../../business/utils/titre-etape-heritage-props-find' +import Titres from '../../database/models/titres' +import { userSuper } from '../../database/user-super' import { ADMINISTRATION_IDS, Administrations } from 'camino-common/src/administrations' -jest.mock('../src/tools/dir-create', () => ({ +jest.mock('../../tools/dir-create', () => ({ __esModule: true, default: jest.fn() })) -jest.mock('../src/tools/file-stream-create', () => ({ +jest.mock('../../tools/file-stream-create', () => ({ __esModule: true, default: jest.fn() })) -jest.mock('../src/tools/file-delete', () => ({ +jest.mock('../../tools/file-delete', () => ({ __esModule: true, default: jest.fn() })) diff --git a/packages/api/tests/titres.test.ts b/packages/api/src/api/graphql/titres.test.integration.ts similarity index 96% rename from packages/api/tests/titres.test.ts rename to packages/api/src/api/graphql/titres.test.integration.ts index 174ececb7..14a6e98fb 100644 --- a/packages/api/tests/titres.test.ts +++ b/packages/api/src/api/graphql/titres.test.integration.ts @@ -1,5 +1,5 @@ -import { dbManager } from './db-manager' -import { graphQLCall, queryImport } from './_utils/index' +import { dbManager } from '../../../tests/db-manager' +import { graphQLCall, queryImport } from '../../../tests/_utils/index' import { titreWithActiviteGrp, titrePublicLecture, @@ -7,8 +7,8 @@ import { titreEtapesPubliques, titreDemarchesPubliques, titreActivites -} from './__mocks__/titres' -import { titreCreate } from '../src/database/queries/titres' +} from '../../../tests/__mocks__/titres' +import { titreCreate } from '../../database/queries/titres' import { ADMINISTRATION_IDS, Administrations @@ -109,7 +109,9 @@ describe('titre', () => { expect(res.body.errors).toBeUndefined() expect(res.body.data.titre.demarches[0].etapes).toHaveLength(8) expect( - res.body.data.titre.demarches[0].etapes.map(({ id }) => ({ id })) + res.body.data.titre.demarches[0].etapes.map(({ id }: { id: string }) => ({ + id + })) ).toEqual( expect.arrayContaining([ { id: 'titre-id-demarche-id-aof' }, @@ -136,7 +138,9 @@ describe('titre', () => { expect(res.body.errors).toBeUndefined() expect(res.body.data.titre.demarches[0].etapes.length).toEqual(9) expect( - res.body.data.titre.demarches[0].etapes.map(({ id }) => ({ id })) + res.body.data.titre.demarches[0].etapes.map(({ id }: { id: string }) => ({ + id + })) ).toEqual( expect.arrayContaining([ { id: 'titre-id-demarche-id-aof' }, diff --git a/packages/api/tests/token.test.ts b/packages/api/src/api/graphql/token.test.integration.ts similarity index 80% rename from packages/api/tests/token.test.ts rename to packages/api/src/api/graphql/token.test.integration.ts index 66fc9ccf7..247b918b6 100644 --- a/packages/api/tests/token.test.ts +++ b/packages/api/src/api/graphql/token.test.integration.ts @@ -1,6 +1,6 @@ -import { dbManager } from './db-manager' -import { graphQLCall, queryImport } from './_utils/index' -import Utilisateurs from '../src/database/models/utilisateurs' +import { dbManager } from '../../../tests/db-manager' +import { graphQLCall, queryImport } from '../../../tests/_utils/index' +import Utilisateurs from '../../database/models/utilisateurs' console.info = jest.fn() console.error = jest.fn() @@ -69,15 +69,19 @@ describe('utilisateurConnecter', () => { expect(res.body.errors).toBeUndefined() const setCookies = res.get('Set-Cookie') - expect(setCookies.find(c => c.startsWith('accessToken'))).toBeDefined() - expect(setCookies.find(c => c.startsWith('refreshToken'))).toBeDefined() + expect( + setCookies.find((c: string) => c.startsWith('accessToken')) + ).toBeDefined() + expect( + setCookies.find((c: string) => c.startsWith('refreshToken')) + ).toBeDefined() const userInDB = await Utilisateurs.query() .findById(res.body.data.utilisateurConnecter.id) .execute() - expect(setCookies.find(c => c.startsWith('refreshToken'))).toContain( - userInDB!.refreshToken - ) + expect( + setCookies.find((c: string) => c.startsWith('refreshToken')) + ).toContain(userInDB!.refreshToken) }) }) diff --git a/packages/api/tests/utilisateurs.test.ts b/packages/api/src/api/graphql/utilisateurs.test.integration.ts similarity index 96% rename from packages/api/tests/utilisateurs.test.ts rename to packages/api/src/api/graphql/utilisateurs.test.integration.ts index 6e2c49280..1ed245b24 100644 --- a/packages/api/tests/utilisateurs.test.ts +++ b/packages/api/src/api/graphql/utilisateurs.test.integration.ts @@ -1,15 +1,20 @@ -import { app } from './app' -import { graphQLCall, queryImport, tokenCreate } from './_utils/index' -import { userAdd } from '../src/knex/user-add' +import { app } from '../../../tests/app' +import { + graphQLCall, + queryImport, + tokenCreate +} from '../../../tests/_utils/index' +import { userAdd } from '../../knex/user-add' import request from 'supertest' import jwt from 'jsonwebtoken' -import { dbManager } from './db-manager' -import { IUtilisateur } from '../src/types' +import { dbManager } from '../../../tests/db-manager' +import { IUtilisateur } from '../../types' import { Administrations } from 'camino-common/src/administrations' +import { Knex } from 'knex' console.info = jest.fn() console.error = jest.fn() -let knex +let knex: Knex<any, unknown[]> beforeAll(async () => { knex = await dbManager.populateDb() }) diff --git a/packages/api/src/api/rest/__snapshots__/titres.test.ts.snap b/packages/api/src/api/rest/__snapshots__/titres.test.integration.ts.snap similarity index 100% rename from packages/api/src/api/rest/__snapshots__/titres.test.ts.snap rename to packages/api/src/api/rest/__snapshots__/titres.test.integration.ts.snap diff --git a/packages/api/src/api/rest/titres.test.ts b/packages/api/src/api/rest/titres.test.integration.ts similarity index 98% rename from packages/api/src/api/rest/titres.test.ts rename to packages/api/src/api/rest/titres.test.integration.ts index c30816018..a1a8cb705 100644 --- a/packages/api/src/api/rest/titres.test.ts +++ b/packages/api/src/api/rest/titres.test.integration.ts @@ -10,7 +10,8 @@ import { } from 'camino-common/src/administrations' import { ITitreDemarche, ITitreEtape } from '../../types' import { entreprisesUpsert } from '../../database/queries/entreprises' -let knex +import { Knex } from 'knex' +let knex: Knex<any, unknown[]> beforeAll(async () => { knex = await dbManager.populateDb() }) diff --git a/packages/api/tests/upload.test.ts b/packages/api/src/api/rest/upload.test.integration.ts similarity index 87% rename from packages/api/tests/upload.test.ts rename to packages/api/src/api/rest/upload.test.integration.ts index 6a5d5db3c..8c9b2890e 100644 --- a/packages/api/tests/upload.test.ts +++ b/packages/api/src/api/rest/upload.test.integration.ts @@ -1,5 +1,5 @@ -import { restUploadCall } from './_utils' -import { dbManager } from './db-manager' +import { restUploadCall } from '../../../tests/_utils' +import { dbManager } from '../../../tests/db-manager' jest.mock('tus-node-server') diff --git a/packages/api/src/business/processes/__mocks__/titres-administrations-gestionnaires-update-titres.ts b/packages/api/src/business/processes/__mocks__/titres-administrations-gestionnaires-update-titres.ts index 9eb0dc2c1..2ec14706d 100644 --- a/packages/api/src/business/processes/__mocks__/titres-administrations-gestionnaires-update-titres.ts +++ b/packages/api/src/business/processes/__mocks__/titres-administrations-gestionnaires-update-titres.ts @@ -1,11 +1,11 @@ -import Administrations from '../../../database/models/administrations' import Titres from '../../../database/models/titres' +import Administrations from '../../../database/models/administrations' const administrations = [ { id: 'dgec' }, { id: 'dgaln' }, { id: 'ptmg' } -] as Administrations[] +] as unknown as Administrations[] const titresAdministrationGestionnaireVide = [ { id: 'titre-id', domaineId: 'm' } @@ -16,14 +16,14 @@ const titresAdministrationGestionnaireInexistante = [ id: 'titre-id', administrationsGestionnaires: [{ id: 'inexistante' }] } -] as Titres[] +] as unknown as Titres[] const titresAdministrationGestionnaireExistante = [ { id: 'titre-id', administrationsGestionnaires: [{ id: 'dgec' }] } -] as Titres[] +] as unknown as Titres[] export { administrations, diff --git a/packages/api/src/business/processes/__mocks__/titres-etapes-administrations-locales-update-etapes.ts b/packages/api/src/business/processes/__mocks__/titres-etapes-administrations-locales-update-etapes.ts index a6bbd177e..21b8dd4e0 100644 --- a/packages/api/src/business/processes/__mocks__/titres-etapes-administrations-locales-update-etapes.ts +++ b/packages/api/src/business/processes/__mocks__/titres-etapes-administrations-locales-update-etapes.ts @@ -140,7 +140,7 @@ const titresEtapesAdministrationLocalesExistante = [ } ] } -] as Titres[] +] as unknown as Titres[] const titresArm = [ { diff --git a/packages/api/src/business/processes/entreprises-update.test.ts b/packages/api/src/business/processes/entreprises-update.test.ts index 0384de1af..33ba5976d 100644 --- a/packages/api/src/business/processes/entreprises-update.test.ts +++ b/packages/api/src/business/processes/entreprises-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { entreprisesUpdate } from './entreprises-update' import { entreprisesGet } from '../../database/queries/entreprises' import { entreprisesEtablissementsGet } from '../../database/queries/entreprises-etablissements' @@ -52,13 +50,13 @@ jest.mock('../../tools/api-insee/index', () => ({ apiInseeEntreprisesEtablissementsGet: jest.fn() })) -const entreprisesGetMock = mocked(entreprisesGet, true) -const entreprisesEtablissementsGetMock = mocked( +const entreprisesGetMock = jest.mocked(entreprisesGet, true) +const entreprisesEtablissementsGetMock = jest.mocked( entreprisesEtablissementsGet, true ) -const apiInseeEntreprisesGetMock = mocked(apiInseeEntreprisesGet, true) -const apiInseeEntreprisesEtablissementsGetMock = mocked( +const apiInseeEntreprisesGetMock = jest.mocked(apiInseeEntreprisesGet, true) +const apiInseeEntreprisesEtablissementsGetMock = jest.mocked( apiInseeEntreprisesEtablissementsGet, true ) diff --git a/packages/api/src/business/processes/titres-activites-props-update.test.ts b/packages/api/src/business/processes/titres-activites-props-update.test.ts index 92c07027a..cda9e8248 100644 --- a/packages/api/src/business/processes/titres-activites-props-update.test.ts +++ b/packages/api/src/business/processes/titres-activites-props-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { titresActivitesPropsUpdate } from './titres-activites-props-update' import { titresActivitesUpsert } from '../../database/queries/titres-activites' import { titresGet } from '../../database/queries/titres' @@ -22,9 +20,9 @@ jest.mock('../utils/titre-valide-check', () => ({ titreValideCheck: jest.fn() })) -const titresActivitesUpsertMock = mocked(titresActivitesUpsert, true) -const titresGetMock = mocked(titresGet, true) -const titreValideCheckMock = mocked(titreValideCheck, true) +const titresActivitesUpsertMock = jest.mocked(titresActivitesUpsert, true) +const titresGetMock = jest.mocked(titresGet, true) +const titreValideCheckMock = jest.mocked(titreValideCheck, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-activites-relance-send.test.ts b/packages/api/src/business/processes/titres-activites-relance-send.test.ts index 4a9326119..1f9953fd9 100644 --- a/packages/api/src/business/processes/titres-activites-relance-send.test.ts +++ b/packages/api/src/business/processes/titres-activites-relance-send.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'ts-jest/utils' - import { titresActivitesGet } from '../../database/queries/titres-activites' import TitresActivites from '../../database/models/titres-activites' @@ -21,8 +19,8 @@ jest.mock('../../tools/api-mailjet/emails', () => ({ emailsWithTemplateSend: jest.fn().mockImplementation(a => a) })) -const titresActivitesGetMock = mocked(titresActivitesGet, true) -const emailsWithTemplateSendMock = mocked(emailsWithTemplateSend, true) +const titresActivitesGetMock = jest.mocked(titresActivitesGet, true) +const emailsWithTemplateSendMock = jest.mocked(emailsWithTemplateSend, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-activites-statut-ids-update.test.ts b/packages/api/src/business/processes/titres-activites-statut-ids-update.test.ts index 4dae21ae2..0024ee496 100644 --- a/packages/api/src/business/processes/titres-activites-statut-ids-update.test.ts +++ b/packages/api/src/business/processes/titres-activites-statut-ids-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { titresActivitesStatutIdsUpdate } from './titres-activites-statut-ids-update' import { titresActivitesGet } from '../../database/queries/titres-activites' @@ -13,7 +11,7 @@ jest.mock('../../database/queries/titres-activites', () => ({ titresActivitesGet: jest.fn() })) -const titresActivitesGetMock = mocked(titresActivitesGet, true) +const titresActivitesGetMock = jest.mocked(titresActivitesGet, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-activites-update.test.ts b/packages/api/src/business/processes/titres-activites-update.test.ts index c941ae8e1..41fc9e290 100644 --- a/packages/api/src/business/processes/titres-activites-update.test.ts +++ b/packages/api/src/business/processes/titres-activites-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { ITitreActivite } from '../../types' import { titresActivitesUpdate } from './titres-activites-update' @@ -55,13 +53,13 @@ jest.mock('../../tools/api-mailjet/emails', () => ({ emailsWithTemplateSend: jest.fn().mockImplementation(a => a) })) -const titresGetMock = mocked(titresGet, true) -const activitesTypesGetMock = mocked(activitesTypesGet, true) -const titreActiviteTypeCheckMock = mocked(titreActiviteTypeCheck, true) -const anneesBuildMock = mocked(anneesBuild, true) -const titreActivitesBuildMock = mocked(titreActivitesBuild, true) -const emailsSendMock = mocked(emailsSend, true) -const emailsWithTemplateSendMock = mocked(emailsWithTemplateSend, true) +const titresGetMock = jest.mocked(titresGet, true) +const activitesTypesGetMock = jest.mocked(activitesTypesGet, true) +const titreActiviteTypeCheckMock = jest.mocked(titreActiviteTypeCheck, true) +const anneesBuildMock = jest.mocked(anneesBuild, true) +const titreActivitesBuildMock = jest.mocked(titreActivitesBuild, true) +const emailsSendMock = jest.mocked(emailsSend, true) +const emailsWithTemplateSendMock = jest.mocked(emailsWithTemplateSend, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-administrations-gestionnaires-update.test.ts b/packages/api/src/business/processes/titres-administrations-gestionnaires-update.test.ts index b93bd4b2a..7b7d87d09 100644 --- a/packages/api/src/business/processes/titres-administrations-gestionnaires-update.test.ts +++ b/packages/api/src/business/processes/titres-administrations-gestionnaires-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { ITitreAdministrationGestionnaire } from '../../types' import { titresAdministrationsGestionnairesUpdate } from './titres-administrations-gestionnaires-update' @@ -36,17 +34,17 @@ jest.mock('../rules/titre-administrations-gestionnaires-build', () => ({ default: jest.fn() })) -const titresGetMock = mocked(titresGet, true) -const administrationsGetMock = mocked(administrationsGet, true) -const titreAdministrationsGestionnairesBuildMock = mocked( +const titresGetMock = jest.mocked(titresGet, true) +const administrationsGetMock = jest.mocked(administrationsGet, true) +const titreAdministrationsGestionnairesBuildMock = jest.mocked( titreAdministrationsGestionnairesBuild, true ) -const titresAdministrationsGestionnairesCreateMock = mocked( +const titresAdministrationsGestionnairesCreateMock = jest.mocked( titresAdministrationsGestionnairesCreate, true ) -const titreAdministrationGestionnaireDeleteMock = mocked( +const titreAdministrationGestionnaireDeleteMock = jest.mocked( titreAdministrationGestionnaireDelete, true ) diff --git a/packages/api/src/business/processes/titres-contenus-etapes-ids-update.test.ts b/packages/api/src/business/processes/titres-contenus-etapes-ids-update.test.ts index 800c30dfb..b33550fb3 100644 --- a/packages/api/src/business/processes/titres-contenus-etapes-ids-update.test.ts +++ b/packages/api/src/business/processes/titres-contenus-etapes-ids-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { ITitreEtape } from '../../types' import { titresContenusEtapesIdsUpdate } from './titres-contenus-etapes-ids-update' @@ -16,8 +14,11 @@ jest.mock('../rules/titre-prop-etape-find', () => ({ titreContenuTitreEtapeFind: jest.fn() })) -const titresGetMock = mocked(titresGet, true) -const titreContenuTitreEtapeFindMock = mocked(titreContenuTitreEtapeFind, true) +const titresGetMock = jest.mocked(titresGet, true) +const titreContenuTitreEtapeFindMock = jest.mocked( + titreContenuTitreEtapeFind, + true +) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-coordonnees-update.test.ts b/packages/api/src/business/processes/titres-coordonnees-update.test.ts index 8134abf76..4280874e4 100644 --- a/packages/api/src/business/processes/titres-coordonnees-update.test.ts +++ b/packages/api/src/business/processes/titres-coordonnees-update.test.ts @@ -1,4 +1,3 @@ -import { mocked } from 'jest-mock' import { titreCoordonneesFind } from '../utils/titre-coordonnees-find' import { titresGet } from '../../database/queries/titres' import Titres from '../../database/models/titres' @@ -13,8 +12,8 @@ jest.mock('../utils/titre-coordonnees-find', () => ({ titreCoordonneesFind: jest.fn() })) -const titresGetMock = mocked(titresGet, true) -const titreCoordonneesFindMock = mocked(titreCoordonneesFind, true) +const titresGetMock = jest.mocked(titresGet, true) +const titreCoordonneesFindMock = jest.mocked(titreCoordonneesFind, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-dates-update.test.ts b/packages/api/src/business/processes/titres-dates-update.test.ts index dd59554b6..50df88704 100644 --- a/packages/api/src/business/processes/titres-dates-update.test.ts +++ b/packages/api/src/business/processes/titres-dates-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { titresDatesUpdate } from './titres-dates-update' import { titreDateFinFind } from '../rules/titre-date-fin-find' import { titreDateDebutFind } from '../rules/titre-date-debut-find' @@ -24,10 +22,10 @@ jest.mock('../rules/titre-date-demande-find', () => ({ titreDateDemandeFind: jest.fn() })) -const titresGetMock = mocked(titresGet, true) -const titreDateFinFindMock = mocked(titreDateFinFind, true) -const titreDateDebutFindMock = mocked(titreDateDebutFind, true) -const titreDateDemandeFindMock = mocked(titreDateDemandeFind, true) +const titresGetMock = jest.mocked(titresGet, true) +const titreDateFinFindMock = jest.mocked(titreDateFinFind, true) +const titreDateDebutFindMock = jest.mocked(titreDateDebutFind, true) +const titreDateDemandeFindMock = jest.mocked(titreDateDemandeFind, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-demarches-depot-create.test.ts b/packages/api/src/business/processes/titres-demarches-depot-create.test.ts index 7500d61fc..e20665d5e 100644 --- a/packages/api/src/business/processes/titres-demarches-depot-create.test.ts +++ b/packages/api/src/business/processes/titres-demarches-depot-create.test.ts @@ -3,7 +3,6 @@ import { titreDemarcheGet } from '../../database/queries/titres-demarches' import TitresDemarches from '../../database/models/titres-demarches' import { titresEtapesDepotCreate } from './titres-demarches-depot-create' import * as titresDemarchesDepotCreateMethods from './titres-demarches-depot-create' -import { mocked } from 'jest-mock' jest.mock('../../database/queries/titres-demarches', () => ({ titreDemarcheGet: jest.fn() @@ -15,7 +14,7 @@ const titreEtapeDepotCreateMock = jest.spyOn( ) titreEtapeDepotCreateMock.mockImplementation(() => Promise.resolve()) -const titreDemarcheGetMock = mocked(titreDemarcheGet, true) +const titreDemarcheGetMock = jest.mocked(titreDemarcheGet, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-demarches-ordre-update.test.ts b/packages/api/src/business/processes/titres-demarches-ordre-update.test.ts index fdcb48acb..3c10eda13 100644 --- a/packages/api/src/business/processes/titres-demarches-ordre-update.test.ts +++ b/packages/api/src/business/processes/titres-demarches-ordre-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { titresDemarchesOrdreUpdate } from './titres-demarches-ordre-update' import { titresGet } from '../../database/queries/titres' @@ -16,7 +14,7 @@ jest.mock('../../database/queries/titres-demarches', () => ({ titreDemarcheUpdate: jest.fn().mockResolvedValue(true) })) -const titresGetMock = mocked(titresGet, true) +const titresGetMock = jest.mocked(titresGet, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-demarches-public-update.test.ts b/packages/api/src/business/processes/titres-demarches-public-update.test.ts index ac674ecbd..72e418a7e 100644 --- a/packages/api/src/business/processes/titres-demarches-public-update.test.ts +++ b/packages/api/src/business/processes/titres-demarches-public-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { titresDemarchesPublicUpdate } from './titres-demarches-public-update' import { titresGet } from '../../database/queries/titres' @@ -16,7 +14,7 @@ jest.mock('../../database/queries/titres-demarches', () => ({ titreDemarcheUpdate: jest.fn().mockResolvedValue(true) })) -const titresGetMock = mocked(titresGet, true) +const titresGetMock = jest.mocked(titresGet, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-demarches-statut-ids-update.test.ts b/packages/api/src/business/processes/titres-demarches-statut-ids-update.test.ts index c32a83799..ea33efb47 100644 --- a/packages/api/src/business/processes/titres-demarches-statut-ids-update.test.ts +++ b/packages/api/src/business/processes/titres-demarches-statut-ids-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { titresDemarchesStatutIdUpdate } from './titres-demarches-statut-ids-update' import { titresGet } from '../../database/queries/titres' @@ -18,7 +16,7 @@ jest.mock('../../database/queries/titres', () => ({ titresGet: jest.fn() })) -const titresGetMock = mocked(titresGet, true) +const titresGetMock = jest.mocked(titresGet, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-etapes-administrations-locales-update.test.ts b/packages/api/src/business/processes/titres-etapes-administrations-locales-update.test.ts index f92a8141b..5370df59e 100644 --- a/packages/api/src/business/processes/titres-etapes-administrations-locales-update.test.ts +++ b/packages/api/src/business/processes/titres-etapes-administrations-locales-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { titresEtapesAdministrationsLocalesUpdate } from './titres-etapes-administrations-locales-update' import { titresEtapesAdministrationsCreate, @@ -32,9 +30,9 @@ jest.mock('../../database/queries/administrations', () => ({ administrationsGet: jest.fn() })) -const titresGetMock = mocked(titresGet, true) +const titresGetMock = jest.mocked(titresGet, true) -const administrationsGetMock = mocked(administrationsGet, true) +const administrationsGetMock = jest.mocked(administrationsGet, true) console.info = jest.fn() @@ -97,7 +95,9 @@ describe("administrations d'une étape", () => { titresGetMock.mockResolvedValue( titresEtapesAdministrationLocalesInexistante ) - administrationsGetMock.mockResolvedValue([{ id: '0' }] as Administrations[]) + administrationsGetMock.mockResolvedValue([ + { id: '0' } + ] as unknown as Administrations[]) const { titresEtapesAdministrationsLocalesCreated, titresEtapesAdministrationsLocalesDeleted diff --git a/packages/api/src/business/processes/titres-etapes-areas-update.test.ts b/packages/api/src/business/processes/titres-etapes-areas-update.test.ts index f37e48841..e0b4f28ac 100644 --- a/packages/api/src/business/processes/titres-etapes-areas-update.test.ts +++ b/packages/api/src/business/processes/titres-etapes-areas-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { IGeometry } from '../../types' import { titresEtapesAreasUpdate } from './titres-etapes-areas-update' @@ -56,10 +54,10 @@ jest.mock('../../tools/api-geo/index', () => ({ console.info = jest.fn() console.error = jest.fn() -const titresEtapesGetMock = mocked(titresEtapesGet, true) -const foretsGetMock = mocked(foretsGet, true) -const communesGetMock = mocked(communesGet, true) -const geoAreaGeojsonGetMock = mocked(apiGeoGet, true) +const titresEtapesGetMock = jest.mocked(titresEtapesGet, true) +const foretsGetMock = jest.mocked(foretsGet, true) +const communesGetMock = jest.mocked(communesGet, true) +const geoAreaGeojsonGetMock = jest.mocked(apiGeoGet, true) describe('mise à jour de toutes les territoires des étapes', () => { test('ajoute 2 communes et 1 forêt dans une étape et dans la liste de communes et des forêts', async () => { diff --git a/packages/api/src/business/processes/titres-etapes-ordre-update.test.ts b/packages/api/src/business/processes/titres-etapes-ordre-update.test.ts index 63bee02de..28e39a3d9 100644 --- a/packages/api/src/business/processes/titres-etapes-ordre-update.test.ts +++ b/packages/api/src/business/processes/titres-etapes-ordre-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { titresEtapesOrdreUpdate } from './titres-etapes-ordre-update' import { titreEtapeUpdate } from '../../database/queries/titres-etapes' import { titresDemarchesGet } from '../../database/queries/titres-demarches' @@ -19,7 +17,7 @@ jest.mock('../../database/queries/titres-demarches', () => ({ titresDemarchesGet: jest.fn() })) -const titresDemarchesGetMock = mocked(titresDemarchesGet, true) +const titresDemarchesGetMock = jest.mocked(titresDemarchesGet, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-phases-update.test.ts b/packages/api/src/business/processes/titres-phases-update.test.ts index 10fd0227a..24cf3c4d0 100644 --- a/packages/api/src/business/processes/titres-phases-update.test.ts +++ b/packages/api/src/business/processes/titres-phases-update.test.ts @@ -1,4 +1,3 @@ -import { mocked } from 'jest-mock' import { titresPhasesUpdate } from './titres-phases-update' import { titrePhasesUpsert, @@ -24,7 +23,7 @@ jest.mock('../../database/queries/titres', () => ({ titresGet: jest.fn() })) -const titresGetMock = mocked(titresGet, true) +const titresGetMock = jest.mocked(titresGet, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-points-references-create.test.ts b/packages/api/src/business/processes/titres-points-references-create.test.ts index 7d88578d6..d65fb160e 100644 --- a/packages/api/src/business/processes/titres-points-references-create.test.ts +++ b/packages/api/src/business/processes/titres-points-references-create.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { titresPointsReferencesCreate } from './titres-points-references-create' import { titresPointsGet, @@ -12,7 +10,7 @@ jest.mock('../../database/queries/titres-points', () => ({ titresPointsGet: jest.fn() })) -const titresPointsGetMock = mocked(titresPointsGet, true) +const titresPointsGetMock = jest.mocked(titresPointsGet, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-props-etapes-ids-update.test.ts b/packages/api/src/business/processes/titres-props-etapes-ids-update.test.ts index ff0c4655b..0ceb1999e 100644 --- a/packages/api/src/business/processes/titres-props-etapes-ids-update.test.ts +++ b/packages/api/src/business/processes/titres-props-etapes-ids-update.test.ts @@ -1,5 +1,4 @@ import { ITitreEtape } from '../../types' -import { mocked } from 'jest-mock' import { titresPropsEtapesIdsUpdate } from './titres-props-etapes-ids-update' import { titrePropTitreEtapeFind } from '../rules/titre-prop-etape-find' @@ -15,8 +14,8 @@ jest.mock('../rules/titre-prop-etape-find', () => ({ titrePropTitreEtapeFind: jest.fn() })) -const titresGetMock = mocked(titresGet, true) -const titrePropTitreEtapeFindMock = mocked(titrePropTitreEtapeFind, true) +const titresGetMock = jest.mocked(titresGet, true) +const titrePropTitreEtapeFindMock = jest.mocked(titrePropTitreEtapeFind, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-public-update.test.ts b/packages/api/src/business/processes/titres-public-update.test.ts index 083a4c15a..37b85537b 100644 --- a/packages/api/src/business/processes/titres-public-update.test.ts +++ b/packages/api/src/business/processes/titres-public-update.test.ts @@ -1,4 +1,3 @@ -import { mocked } from 'jest-mock' import { titresPublicUpdate } from './titres-public-update' import { titresGet } from '../../database/queries/titres' @@ -13,7 +12,7 @@ jest.mock('../../database/queries/titres', () => ({ titresGet: jest.fn() })) -const titresGetMock = mocked(titresGet, true) +const titresGetMock = jest.mocked(titresGet, true) console.info = jest.fn() diff --git a/packages/api/src/business/processes/titres-slugs-update.test.ts b/packages/api/src/business/processes/titres-slugs-update.test.ts index 3c65bc724..2e3a95410 100644 --- a/packages/api/src/business/processes/titres-slugs-update.test.ts +++ b/packages/api/src/business/processes/titres-slugs-update.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import Titres from '../../database/models/titres' import { titresSlugsUpdate } from './titres-slugs-update' @@ -18,8 +16,8 @@ jest.mock('../../database/queries/titres', () => ({ titresGet: jest.fn().mockResolvedValue(true) })) -const titresGetMock = mocked(titresGet, true) -const titreSlugAndRelationsUpdateMock = mocked( +const titresGetMock = jest.mocked(titresGet, true) +const titreSlugAndRelationsUpdateMock = jest.mocked( titreSlugAndRelationsUpdate, true ) diff --git a/packages/api/src/business/processes/titres-statut-ids-update.test.ts b/packages/api/src/business/processes/titres-statut-ids-update.test.ts index ff21f2454..78bb830ef 100644 --- a/packages/api/src/business/processes/titres-statut-ids-update.test.ts +++ b/packages/api/src/business/processes/titres-statut-ids-update.test.ts @@ -1,4 +1,3 @@ -import { mocked } from 'jest-mock' import { titresStatutIdsUpdate } from './titres-statut-ids-update' import { titresGet } from '../../database/queries/titres' @@ -13,7 +12,7 @@ jest.mock('../../database/queries/titres', () => ({ titresGet: jest.fn() })) -const titresGetMock = mocked(titresGet, true) +const titresGetMock = jest.mocked(titresGet, true) console.info = jest.fn() diff --git a/packages/api/src/business/rules-demarches/_utils.test.ts b/packages/api/src/business/rules-demarches/_utils.test.ts index ad69f2f3f..09c5a9404 100644 --- a/packages/api/src/business/rules-demarches/_utils.test.ts +++ b/packages/api/src/business/rules-demarches/_utils.test.ts @@ -1,7 +1,6 @@ import fs from 'fs' import decamelize from 'decamelize' import camelcase from 'camelcase' -import { mocked } from 'jest-mock' import { IDemarcheType, @@ -36,8 +35,11 @@ jest.mock('../utils/props-titre-etapes-ids-find', () => ({ contenusTitreEtapesIdsFind: jest.fn() })) -const titreContenuFormatMock = mocked(titreContenuFormat, true) -const contenusTitreEtapesIdsFindMock = mocked(contenusTitreEtapesIdsFind, true) +const titreContenuFormatMock = jest.mocked(titreContenuFormat, true) +const contenusTitreEtapesIdsFindMock = jest.mocked( + contenusTitreEtapesIdsFind, + true +) const elementsGet = <T>(fileName: string): T[] => { fileName = decamelize(fileName, { separator: '-' }) diff --git a/packages/api/src/business/rules/titre-activites-build.test.ts b/packages/api/src/business/rules/titre-activites-build.test.ts index b6139223e..9f789bbff 100644 --- a/packages/api/src/business/rules/titre-activites-build.test.ts +++ b/packages/api/src/business/rules/titre-activites-build.test.ts @@ -1,4 +1,3 @@ -import { mocked } from 'jest-mock' import { IActiviteType, ITitreActivite, @@ -19,7 +18,7 @@ import { jest.mock('../../database/cache/metas', () => ({ metasGet: jest.fn() })) -const metasGetMock = mocked(metasGet, true) +const metasGetMock = jest.mocked(metasGet, true) describe("construction des activités d'un titre", () => { const aujourdhui = '2021-01-01' diff --git a/packages/api/src/business/rules/titre-demarche-annulation-date-fin-find.test.ts b/packages/api/src/business/rules/titre-demarche-annulation-date-fin-find.test.ts index 02a9f3a43..dee766c73 100644 --- a/packages/api/src/business/rules/titre-demarche-annulation-date-fin-find.test.ts +++ b/packages/api/src/business/rules/titre-demarche-annulation-date-fin-find.test.ts @@ -42,6 +42,7 @@ describe("date de fin d'une démarche d'annulation", () => { ) test("retourne null si l'étape n'a ni date, ni date de fin", () => { + // TODO 2022-05-10, c'est étrange, on va à l'encontre de typescript ici. Soit le typage est faux, soit le test ne sert à rien const titreDemarcheAnnulationEtapesSansDate: ITitreEtape[] = [ { id: 'h-cx-courdemanges-1988-ret01-dex01', @@ -49,6 +50,8 @@ describe("date de fin d'une démarche d'annulation", () => { typeId: 'dex', statutId: 'acc', ordre: 1, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore date: null } ] diff --git a/packages/api/src/business/utils/contenu-element-file-process.test.ts b/packages/api/src/business/utils/contenu-element-file-process.test.ts index 9517b45f1..86b279a19 100644 --- a/packages/api/src/business/utils/contenu-element-file-process.test.ts +++ b/packages/api/src/business/utils/contenu-element-file-process.test.ts @@ -1,6 +1,5 @@ import { FileUpload } from 'graphql-upload' import { ReadStream } from 'fs' -import { mocked } from 'jest-mock' import { IContenu, IContenuElement, ISection, ITitreEtape } from '../../types' @@ -19,19 +18,19 @@ jest.mock('../../tools/dir-create', () => ({ __esModule: true, default: jest.fn() })) -const dirCreateMock = mocked(dirCreate, true) +const dirCreateMock = jest.mocked(dirCreate, true) jest.mock('../../tools/file-stream-create', () => ({ __esModule: true, default: jest.fn() })) -const fileStreamCreateMock = mocked(fileStreamCreate, true) +const fileStreamCreateMock = jest.mocked(fileStreamCreate, true) jest.mock('../../tools/file-delete', () => ({ __esModule: true, default: jest.fn() })) -const fileDeleteMock = mocked(fileDelete, true) +const fileDeleteMock = jest.mocked(fileDelete, true) jest.mock('crypto-random-string', () => () => 'prefix') diff --git a/packages/api/src/business/utils/titre-activite-valide-check.test.ts b/packages/api/src/business/utils/titre-activite-valide-check.test.ts index 70588f841..2206a3622 100644 --- a/packages/api/src/business/utils/titre-activite-valide-check.test.ts +++ b/packages/api/src/business/utils/titre-activite-valide-check.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { ITitreDemarche } from '../../types' import { titreActiviteValideCheck } from './titre-activite-valide-check' @@ -10,7 +8,7 @@ jest.mock('./titre-valide-check', () => ({ titreValideCheck: jest.fn() })) -const titreValideCheckMock = mocked(titreValideCheck, true) +const titreValideCheckMock = jest.mocked(titreValideCheck, true) describe('validité des activités', () => { test("retourne faux si la date de l'activité est après aujourd'hui", () => { diff --git a/packages/api/src/business/utils/titre-coordonnees-find.test.ts b/packages/api/src/business/utils/titre-coordonnees-find.test.ts index 34efe832b..8bbdda4d5 100644 --- a/packages/api/src/business/utils/titre-coordonnees-find.test.ts +++ b/packages/api/src/business/utils/titre-coordonnees-find.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { titreCoordonneesFind } from './titre-coordonnees-find' import { geojsonCenter } from '../../tools/geojson' @@ -9,7 +7,7 @@ jest.mock('../../tools/geojson', () => ({ geojsonCenter: jest.fn() })) -const geojsonCenterMock = mocked(geojsonCenter, true) +const geojsonCenterMock = jest.mocked(geojsonCenter, true) describe("coordonnées d'un titre", () => { test("retourne les coordonnées d'un titre", () => { diff --git a/packages/api/src/business/utils/titre-etape-heritage-contenu-find.test.ts b/packages/api/src/business/utils/titre-etape-heritage-contenu-find.test.ts index 8ef9e937f..38272ce04 100644 --- a/packages/api/src/business/utils/titre-etape-heritage-contenu-find.test.ts +++ b/packages/api/src/business/utils/titre-etape-heritage-contenu-find.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { IContenu, IEtapeType, @@ -348,7 +346,7 @@ describe('retourne le contenu de l’étape en fonction de son héritage', () => }) describe('construit le dictionnaire les sections', () => { - const etapeTypeSectionsFormatMock = mocked(etapeTypeSectionsFormat, true) + const etapeTypeSectionsFormatMock = jest.mocked(etapeTypeSectionsFormat, true) test('retourne un dictionnaire vide', () => { const dictionary = etapeSectionsDictionaryBuild([]) diff --git a/packages/api/src/business/utils/titre-slug-and-relations-update.test.ts b/packages/api/src/business/utils/titre-slug-and-relations-update.test.integration.ts similarity index 100% rename from packages/api/src/business/utils/titre-slug-and-relations-update.test.ts rename to packages/api/src/business/utils/titre-slug-and-relations-update.test.integration.ts diff --git a/packages/api/src/business/utils/titre-valide-check.test.ts b/packages/api/src/business/utils/titre-valide-check.test.ts index e66fc506e..9b2c946ec 100644 --- a/packages/api/src/business/utils/titre-valide-check.test.ts +++ b/packages/api/src/business/utils/titre-valide-check.test.ts @@ -1,5 +1,3 @@ -import { mocked } from 'jest-mock' - import { ITitreDemarche } from '../../types' import { titreValideCheck } from './titre-valide-check' @@ -18,9 +16,9 @@ jest.mock('./titre-demarches-etapes-rebuild', () => ({ titreDemarchesEtapesRebuild: jest.fn() })) -const titreStatutIdFindMock = mocked(titreStatutIdFind, true) +const titreStatutIdFindMock = jest.mocked(titreStatutIdFind, true) -const titreDemarchesEtapesRebuildMock = mocked( +const titreDemarchesEtapesRebuildMock = jest.mocked( titreDemarchesEtapesRebuild, true ) diff --git a/packages/api/src/business/validations/titre-etape-type-and-status-validate.test.ts b/packages/api/src/business/validations/titre-etape-type-and-status-validate.test.ts index 24118d169..53a88a15e 100644 --- a/packages/api/src/business/validations/titre-etape-type-and-status-validate.test.ts +++ b/packages/api/src/business/validations/titre-etape-type-and-status-validate.test.ts @@ -1,4 +1,3 @@ -import { mocked } from 'jest-mock' import { IEtapeType } from '../../types' import { titreEtapeTypeAndStatusValidate } from './titre-etape-type-and-status-validate' @@ -8,7 +7,7 @@ jest.mock('../utils/titre-etape-demarche-etape-type-find', () => ({ titreEtapeDemarcheEtapeTypeFind: jest.fn() })) -const titreEtapeDemarcheEtapeTypeFindMock = mocked( +const titreEtapeDemarcheEtapeTypeFindMock = jest.mocked( titreEtapeDemarcheEtapeTypeFind, true ) diff --git a/packages/api/src/database/queries/permissions/administrations.test.ts b/packages/api/src/database/queries/permissions/administrations.test.integration.ts similarity index 98% rename from packages/api/src/database/queries/permissions/administrations.test.ts rename to packages/api/src/database/queries/permissions/administrations.test.integration.ts index 7ddcb3743..c9d29615f 100644 --- a/packages/api/src/database/queries/permissions/administrations.test.ts +++ b/packages/api/src/database/queries/permissions/administrations.test.integration.ts @@ -184,11 +184,12 @@ describe('administrationsQueryModify', () => { let q = administrationsQueryModify(Administrations.query(), mockUser) let res = await q.findById(prefectureDordogne) - expect(res.emailsModification).toBe(true) + expect(res).not.toBeUndefined() + expect(res?.emailsModification).toBe(true) q = administrationsQueryModify(Administrations.query(), mockUser) res = await q.findById(prefectureCorseDuSud) - expect(res.emailsModification).toBe(null) + expect(res?.emailsModification).toBe(null) }) test.each` diff --git a/packages/api/src/database/queries/permissions/administrations.ts b/packages/api/src/database/queries/permissions/administrations.ts index 5d99d3ad8..52f732447 100644 --- a/packages/api/src/database/queries/permissions/administrations.ts +++ b/packages/api/src/database/queries/permissions/administrations.ts @@ -61,7 +61,7 @@ const emailsLectureQuery = ( const administrationsQueryModify = ( q: QueryBuilder<Administrations, Administrations | Administrations[]>, user: IUtilisateur | null | undefined -) => { +): QueryBuilder<Administrations, Administrations | Administrations[]> => { q.select('administrations.*') const administrationsIds = user?.administrations?.map(a => a.id) || [] diff --git a/packages/api/src/database/queries/permissions/documents.test.ts b/packages/api/src/database/queries/permissions/documents.test.integration.ts similarity index 99% rename from packages/api/src/database/queries/permissions/documents.test.ts rename to packages/api/src/database/queries/permissions/documents.test.integration.ts index 9c55fab52..a238a4cc0 100644 --- a/packages/api/src/database/queries/permissions/documents.test.ts +++ b/packages/api/src/database/queries/permissions/documents.test.integration.ts @@ -10,10 +10,11 @@ import Document from '../../models/documents' import { documentCreate, documentGet } from '../documents' import { etapeTypeDocumentTypeUsedCheck } from './documents' +import { Knex } from 'knex' console.info = jest.fn() console.error = jest.fn() -let knex +let knex: Knex<any, unknown[]> beforeAll(async () => { knex = await dbManager.populateDb() }) diff --git a/packages/api/src/database/queries/permissions/entreprises.test.ts b/packages/api/src/database/queries/permissions/entreprises.test.integration.ts similarity index 100% rename from packages/api/src/database/queries/permissions/entreprises.test.ts rename to packages/api/src/database/queries/permissions/entreprises.test.integration.ts diff --git a/packages/api/src/database/queries/permissions/metas.test.ts b/packages/api/src/database/queries/permissions/metas.test.integration.ts similarity index 91% rename from packages/api/src/database/queries/permissions/metas.test.ts rename to packages/api/src/database/queries/permissions/metas.test.integration.ts index 87e0c63f3..cd173e547 100644 --- a/packages/api/src/database/queries/permissions/metas.test.ts +++ b/packages/api/src/database/queries/permissions/metas.test.integration.ts @@ -6,7 +6,10 @@ import Titres from '../../models/titres' import { IDemarcheType, IUtilisateur } from '../../../types' import AdministrationsTitresTypes from '../../models/administrations-titres-types' import AdministrationsTitresTypesTitresStatuts from '../../models/administrations-titres-types-titres-statuts' -import { Administrations } from 'camino-common/src/administrations' +import { + AdministrationId, + Administrations +} from 'camino-common/src/administrations' console.info = jest.fn() console.error = jest.fn() @@ -29,7 +32,13 @@ describe('metas permissions queries', () => { ${'ope-ptmg-973-01'} | ${false} `( 'l’administration $administrationId peut créer des travaux', - async ({ administrationId, travauxCreation }) => { + async ({ + administrationId, + travauxCreation + }: { + administrationId: AdministrationId + travauxCreation: boolean + }) => { const titreId = idGenerate() await Titres.query().insert({ diff --git a/packages/api/src/database/queries/permissions/titres-demarches.test.ts b/packages/api/src/database/queries/permissions/titres-demarches.test.integration.ts similarity index 100% rename from packages/api/src/database/queries/permissions/titres-demarches.test.ts rename to packages/api/src/database/queries/permissions/titres-demarches.test.integration.ts diff --git a/packages/api/src/database/queries/permissions/titres-etapes.test.ts b/packages/api/src/database/queries/permissions/titres-etapes.test.integration.ts similarity index 100% rename from packages/api/src/database/queries/permissions/titres-etapes.test.ts rename to packages/api/src/database/queries/permissions/titres-etapes.test.integration.ts diff --git a/packages/api/src/database/queries/permissions/titres.test.ts b/packages/api/src/database/queries/permissions/titres.test.integration.ts similarity index 98% rename from packages/api/src/database/queries/permissions/titres.test.ts rename to packages/api/src/database/queries/permissions/titres.test.integration.ts index 436deff88..16535627a 100644 --- a/packages/api/src/database/queries/permissions/titres.test.ts +++ b/packages/api/src/database/queries/permissions/titres.test.integration.ts @@ -25,6 +25,7 @@ import Administrations from '../../models/administrations' import { userSuper } from '../../user-super' import { ADMINISTRATION_IDS, + AdministrationId, Administrations as CommonAdministrations } from 'camino-common/src/administrations' @@ -279,7 +280,15 @@ describe('titresQueryModify', () => { ${'ope-ptmg-973-01'} | ${true} | ${false} `( 'Vérifie si le $administrationId, gestionnaire $gestionnaire peut créer des travaux ($travauxCreation)', - async ({ administrationId, gestionnaire, travauxCreation }) => { + async ({ + administrationId, + gestionnaire, + travauxCreation + }: { + administrationId: AdministrationId + gestionnaire: boolean + travauxCreation: boolean + }) => { const titreId = idGenerate() await Titres.query().insert({ diff --git a/packages/api/src/database/queries/permissions/utilisateurs.test.ts b/packages/api/src/database/queries/permissions/utilisateurs.test.integration.ts similarity index 100% rename from packages/api/src/database/queries/permissions/utilisateurs.test.ts rename to packages/api/src/database/queries/permissions/utilisateurs.test.integration.ts diff --git a/packages/api/src/database/queries/titres-activites.test.ts b/packages/api/src/database/queries/titres-activites.test.integration.ts similarity index 100% rename from packages/api/src/database/queries/titres-activites.test.ts rename to packages/api/src/database/queries/titres-activites.test.integration.ts diff --git a/packages/api/src/database/queries/titres-demarches.test.ts b/packages/api/src/database/queries/titres-demarches.test.integration.ts similarity index 93% rename from packages/api/src/database/queries/titres-demarches.test.ts rename to packages/api/src/database/queries/titres-demarches.test.integration.ts index ee2ea3dd0..94e6d8168 100644 --- a/packages/api/src/database/queries/titres-demarches.test.ts +++ b/packages/api/src/database/queries/titres-demarches.test.integration.ts @@ -52,8 +52,8 @@ describe('teste les requêtes sur les démarches', () => { expect(archiveDemarche?.archive).toBe(true) expect(archiveDemarche?.etapes).toHaveLength(3) - for (const etape of archiveDemarche!.etapes) { - expect(etape.archive).toBe(true) + for (const etape of archiveDemarche?.etapes ?? []) { + expect((etape as TitresEtapes).archive).toBe(true) } }) }) diff --git a/packages/api/src/database/queries/titres.test.ts b/packages/api/src/database/queries/titres.test.integration.ts similarity index 100% rename from packages/api/src/database/queries/titres.test.ts rename to packages/api/src/database/queries/titres.test.integration.ts diff --git a/packages/api/tests/_utils/index.ts b/packages/api/tests/_utils/index.ts index 14b410ce8..061edb353 100644 --- a/packages/api/tests/_utils/index.ts +++ b/packages/api/tests/_utils/index.ts @@ -45,7 +45,7 @@ export const restCall = async ( path: string, permissionId: IPermissionId, administrationId?: AdministrationId -): request.Test => { +): Promise<request.Test> => { const req = request(app).get(path) return cookiesSet(req, permissionId, administrationId) @@ -55,7 +55,7 @@ const cookiesSet = async ( req: request.Test, permissionId?: IPermissionId, administrationId?: string -) => { +): Promise<request.Test> => { let token if (permissionId) { token = await userTokenGenerate(permissionId, administrationId) diff --git a/packages/api/tests/db-manager.ts b/packages/api/tests/db-manager.ts index fb44f9a62..7e1d2068e 100644 --- a/packages/api/tests/db-manager.ts +++ b/packages/api/tests/db-manager.ts @@ -8,7 +8,7 @@ import { knexSnakeCaseMappers, Model } from 'objection' class DbManager { private readonly dbName: string - private knexInstance = null + private knexInstance: null | Knex<any, unknown[]> = null public constructor() { this.dbName = `a${idGenerate().toLowerCase()}` @@ -62,10 +62,20 @@ class DbManager { return knex(knexConfig) } + private static checkKnexInstance( + knex: null | Knex<any, unknown[]> + ): asserts knex is Knex<any, unknown[]> { + if (knex === null) { + throw new Error('populateDb should be called first') + } + } + public async populateDb(): Promise<Knex<any, unknown>> { await this.init() await this.injectSeed() + DbManager.checkKnexInstance(this.knexInstance) + return this.knexInstance } @@ -75,6 +85,7 @@ class DbManager { } public async closeKnex(): Promise<void> { + DbManager.checkKnexInstance(this.knexInstance) await this.knexInstance.destroy() await this.end() } @@ -88,10 +99,12 @@ class DbManager { } private async injectSeed() { + DbManager.checkKnexInstance(this.knexInstance) await this.knexInstance.transaction(async trx => trx.seed.run()) } private async truncateSchema() { + DbManager.checkKnexInstance(this.knexInstance) const tables = (await this.knexInstance('pg_tables') .select('tablename') diff --git a/packages/api/tsconfig.json b/packages/api/tsconfig.json index 344fbb1b7..d1a4beea3 100644 --- a/packages/api/tsconfig.json +++ b/packages/api/tsconfig.json @@ -29,7 +29,7 @@ "tus-node-server": ["./src/@types/tus-node-server"] } }, - "exclude": ["node_modules", "**/*.test.ts", "**/__mocks__/*"], + "exclude": ["node_modules", "**/__mocks__/*"], "include": ["src/**/*", "sources/**/*"], "typedocOptions": { "out": "docs", diff --git a/packages/common/.gitignore b/packages/common/.gitignore index 42a45895c..c1a125b6e 100644 --- a/packages/common/.gitignore +++ b/packages/common/.gitignore @@ -1,2 +1,3 @@ src/*.js -src/*.js.map \ No newline at end of file +src/*.js.map +/coverage diff --git a/packages/common/package.json b/packages/common/package.json index b98ae5c51..7aad0a5aa 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -6,7 +6,8 @@ "scripts": { "test": "jest", "format": "prettier --write src", - "lint": "eslint --fix" + "lint": "eslint --fix", + "ci:test": "jest --coverage" }, "devDependencies": { "@types/jest": "^27.4.1", diff --git a/packages/ui/package.json b/packages/ui/package.json index 3f931872e..24bcc57a0 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -8,7 +8,6 @@ "dev": "vite", "dev:update": "npm-check-updates && npm install && npm audit fix", "start": "node ./index.js", - "codecov": "codecov", "test": "cross-env NODE_ENV=test && jest --verbose", "test:watch": "cross-env NODE_ENV=test jest --watch --verbose", "lint": "prettier --write src && eslint --fix --ext .js,.ts,.vue src", @@ -60,7 +59,6 @@ "babel-preset-vite": "^1.0.4", "chalk": "^5.0.1", "chart.js": "^3.7.1", - "codecov": "^3.8.3", "commitizen": "^4.2.4", "core-js": "^3.21.1", "cross-env": "^7.0.3", @@ -140,8 +138,13 @@ "rules": { "vue/no-mutating-props": 0, "vue/valid-v-bind-sync": 0, - "vue/no-multiple-template-root": ["warn"], - "vue/attribute-hyphenation": ["error", "never"], + "vue/no-multiple-template-root": [ + "warn" + ], + "vue/attribute-hyphenation": [ + "error", + "never" + ], "no-unused-vars": 0 }, "parserOptions": { -- GitLab